web-dev-qa-db-fra.com

Comment trouver des noms en double à l'aide de pandas?

J'ai un pandas.DataFrame avec une colonne appelée name contenant des chaînes. Je voudrais obtenir une liste des noms qui se produisent plus d'une fois dans la colonne. Comment je fais ça?

J'ai essayé:

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

Mais cela ne filtre pas les noms singleton.

21
Yariv

Si vous voulez trouver les lignes avec un nom en double (sauf la première fois que nous le voyons), vous pouvez essayer ceci

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
39
waitingkuo

Une doublure peut être:

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

l'index contient une méthode pour trouver les doublons, les colonnes ne semblent pas avoir une méthode similaire.

11
idoda

value_counts vous donnera également le nombre de doublons.

names = df.name.value_counts()
names[names > 1]
6
Doctor J

Un autre revêtement peut être:

(df.name).drop_duplicates()
2
G Gopi Krishna

J'ai eu un problème similaire et suis tombé sur cette réponse.

Je suppose que cela fonctionne aussi:

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

et df2.index vous donnera une liste de noms avec des doublons

1
mkln

La plupart des réponses données montrent comment supprimer les doublons, pas les trouver.

Ce qui suit sélectionnera chaque ligne dans le bloc de données avec un champ 'name' En double. Notez que cela trouvera chaque instance, pas seulement des doublons après la première occurrence. L'argument keep accepte des valeurs supplémentaires qui peuvent exclure la première ou la dernière occurrence.

df[df.duplicated(['name'], keep=False)]

La référence pandas pour duplicated() peut être trouvée ici .

1
noddy