¿Cómo encontrar nombres duplicados usando pandas?

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í .