Tengo un marco de datos de pandas como a continuación

    text    name    target
0   str1    name1   1
1   str1    name2   3
2   str1    name2   3
3   str2    name1   2
4   str2    name1   2
5   str2    name1   4
6   str3    name3   3

Necesito eliminar esas filas que solo tienen una aparición de una clase de destino. En este caso, el índice de fila 0 y 5 necesito eliminarlo porque 1 y 4 aparecen solo una vez.

Miré en esta publicación y probé a continuación:

df[df.groupby(['target']).transform('sum') > 1]

Pero eso no parece funcionar. ¿Alguien puede sugerir?

0
nad 28 feb. 2020 a las 06:18

2 respuestas

La mejor respuesta

Puede usar value_counts, asignar y filtrar:

print(df[df.target.map(df.target.value_counts()).gt(1)])

Salida:

   text   name  target
1  str1  name2       3
2  str1  name2       3
3  str2  name1       2
4  str2  name1       2
6  str3  name3       3
1
Quang Hoang 28 feb. 2020 a las 03:33

Espero que esto sea suficiente: filtre las filas donde el recuento objetivo no es mayor que 1

df.groupby('target').filter(lambda x: x.count().gt(1).any())

    text    name    target
1   str1    name2   3
2   str1    name2   3
3   str2    name1   2
4   str2    name1   2
6   str3    name3   3
1
sammywemmy 28 feb. 2020 a las 03:24
60444782