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.
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
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.
value_counts vous donnera également le nombre de doublons.
names = df.name.value_counts()
names[names > 1]
Un autre revêtement peut être:
(df.name).drop_duplicates()
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
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 .