2013-03-06 18 views
20

Ho un pandas.DataFrame con una colonna denominata name contenente stringhe. Vorrei ottenere un elenco dei nomi che si verificano più di una volta nella colonna. Come lo faccio?Come trovare i nomi duplicati usando i panda?

ho provato:

funcs_groups = funcs.groupby(funcs.name) 
funcs_groups[(funcs_groups.count().name>1)] 

Ma non filtra i nomi Singleton.

risposta

37

Se si desidera trovare le righe con nome duplicato (tranne la prima volta che vediamo che), si può provare questo

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 
+3

Mi piace più del mio. – DSM

+1

Grazie, ho anche imparato qualcosa dal tuo. – waitingkuo

1

Ho avuto un problema simile e sono imbattuto in questa risposta.

Credo che questo funziona anche:

counts = df.groupby('name').size() 
df2 = pd.DataFrame(counts, columns = ['size']) 
df2 = df2[df2.size>1] 

e df2.index vi darà una lista di nomi con i duplicati

+2

Meglio usare df2 ['size'] invece di df2.size dato che df2.size è una funzione integrata. – Lydia

9

A uno di linea può essere:

x.set_index('name').index.get_duplicates() 

l'indice contiene un metodo per trovare duplicati, le colonne non sembrano avere un metodo simile ..

+1

Questo è esattamente ciò di cui avevo bisogno. Grazie @idoda! – propjk007

+0

Questo "set_index()" distrugge l'indicizzazione del dataframe originale chiamato x? Dovrei eseguire questo comando su una copia del dataframe? –

1

Un altro uno di linea può essere:

(df.name).drop_duplicates() 
3

value_counts vi darà il numero di duplicati pure.

names = df.name.value_counts() 
names[names > 1] 
Problemi correlati