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?
2 respuestas
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
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
Preguntas relacionadas
Nuevas preguntas
python
Python es un lenguaje de programación multipropósito, de tipificación dinámica y de múltiples paradigmas. Está diseñado para ser rápido de aprender, comprender y usar, y hacer cumplir una sintaxis limpia y uniforme. Tenga en cuenta que Python 2 está oficialmente fuera de soporte a partir del 01-01-2020. Aún así, para preguntas de Python específicas de la versión, agregue la etiqueta [python-2.7] o [python-3.x]. Cuando utilice una variante de Python (por ejemplo, Jython, PyPy) o una biblioteca (por ejemplo, Pandas y NumPy), inclúyala en las etiquetas.