Tengo un pandas.DataFrame
con una columna llamada name
contiene cadenas. Me gustaría obtener una lista de los nombres que aparecen más de una vez en la columna. ¿Cómo puedo hacer eso?
Lo intenté:
funcs_groups = funcs.groupby(funcs.name) funcs_groups[(funcs_groups.count().name>1)]
Pero no filtra los nombres singleton.
Si desea buscar las filas con nombre duplicado (excepto la primera vez que lo vemos), puede intentar esto
In [16]: import pandas as pd In [17]: p1 = {'name': 'willy', 'age': 10} In [18]: p2 = {'name': 'willy', 'age': 11} In [19]: p3 = {'name': 'zoe', 'age': 10} In [20]: df = pd.DataFrame([p1, p2, p3]) In [21]: df Out[21]: age name 0 10 willy 1 11 willy 2 10 zoe In [22]: df.duplicated('name') Out[22]: 0 False 1 True 2 False
Un trazador de líneas puede ser:
x.set_index('name').index.get_duplicates()
el índice contiene un método para encontrar duplicados, las columnas no parecen tener un método similar.
value_counts también le dará el número de duplicados.
names = df.name.value_counts() names[names > 1]
Otro forro puede ser:
(df.name).drop_duplicates()
Tuve un problema similar y encontré esta respuesta.
Supongo que esto también funciona:
counts = df.groupby('name').size() df2 = pd.DataFrame(counts, columns = ['size']) df2 = df2[df2.size>1]
y df2.index
le dará una lista de nombres con duplicados
La mayoría de las respuestas dadas demuestran cómo eliminar los duplicados, no encontrarlos.
Lo siguiente seleccionará cada fila en el dataframe con un campo 'name'
duplicado. Tenga en cuenta que esto encontrará cada instancia, no solo duplicados después de la primera aparición. El argumento de keep
acepta valores adicionales que pueden excluir la primera o la última aparición.
df[df.duplicated(['name'], keep=False)]
La referencia de los pandas para duplicated()
se puede encontrar aquí .