J'ai une liste d'articles qui ont probablement des problèmes d'exportation. Je souhaite obtenir une liste des éléments en double afin de pouvoir les comparer manuellement. Lorsque j'essaie d'utiliser la méthode dupliquée pandas , elle ne renvoie que le premier duplicata. Existe-t-il un moyen d'obtenir tous les doublons et pas seulement le premier?
Une petite sous-section de mon ensemble de données ressemble à ceci:
ID,ENROLLMENT_DATE,TRAINER_MANAGING,TRAINER_OPERATOR,FIRST_VISIT_DATE
1536D,12-Feb-12,"06DA1B3-Lebanon NH",,15-Feb-12
F15D,18-May-12,"06405B2-Lebanon NH",,25-Jul-12
8096,8-Aug-12,"0643D38-Hanover NH","0643D38-Hanover NH",25-Jun-12
A036,1-Apr-12,"06CB8CF-Hanover NH","06CB8CF-Hanover NH",9-Aug-12
8944,19-Feb-12,"06D26AD-Hanover NH",,4-Feb-12
1004E,8-Jun-12,"06388B2-Lebanon NH",,24-Dec-11
11795,3-Jul-12,"0649597-White River VT","0649597-White River VT",30-Mar-12
30D7,11-Nov-12,"06D95A3-Hanover NH","06D95A3-Hanover NH",30-Nov-11
3AE2,21-Feb-12,"06405B2-Lebanon NH",,26-Oct-12
B0FE,17-Feb-12,"06D1B9D-Hartland VT",,16-Feb-12
127A1,11-Dec-11,"064456E-Hanover NH","064456E-Hanover NH",11-Nov-12
161FF,20-Feb-12,"0643D38-Hanover NH","0643D38-Hanover NH",3-Jul-12
A036,30-Nov-11,"063B208-Randolph VT","063B208-Randolph VT",
475B,25-Sep-12,"06D26AD-Hanover NH",,5-Nov-12
151A3,7-Mar-12,"06388B2-Lebanon NH",,16-Nov-12
CA62,3-Jan-12,,,
D31B,18-Dec-11,"06405B2-Lebanon NH",,9-Jan-12
20F5,8-Jul-12,"0669C50-Randolph VT",,3-Feb-12
8096,19-Dec-11,"0649597-White River VT","0649597-White River VT",9-Apr-12
14E48,1-Aug-12,"06D3206-Hanover NH",,
177F8,20-Aug-12,"063B208-Randolph VT","063B208-Randolph VT",5-May-12
553E,11-Oct-12,"06D95A3-Hanover NH","06D95A3-Hanover NH",8-Mar-12
12D5F,18-Jul-12,"0649597-White River VT","0649597-White River VT",2-Nov-12
C6DC,13-Apr-12,"06388B2-Lebanon NH",,
11795,27-Feb-12,"0643D38-Hanover NH","0643D38-Hanover NH",19-Jun-12
17B43,11-Aug-12,,,22-Oct-12
A036,11-Aug-12,"06D3206-Hanover NH",,19-Jun-12
Mon code ressemble à ceci actuellement:
df_bigdata_duplicates = df_bigdata[df_bigdata.duplicated(cols='ID')]
Il y a quelques éléments en double. Mais, lorsque j'utilise le code ci-dessus, je n'obtiens que le premier élément. Dans la référence de l'API, je vois comment je peux obtenir le dernier élément, mais j'aimerais tous les avoir afin que je puisse les inspecter visuellement pour voir pourquoi j'obtiens l'écart. Donc, dans cet exemple, je voudrais obtenir les trois entrées A036 et les deux 11795 entrées et toutes les autres entrées dupliquées, au lieu de la première. Toute aide est très appréciée.
la source
ID
, pas" les lignes identiques dans plusieurs colonnes ou toutes les colonnes ".Réponses:
Méthode n ° 1: imprimez toutes les lignes où l'ID est l'un des ID en double:
mais je ne pouvais pas penser à une bonne façon d'éviter de répéter
ids
autant de fois. Je préfère la méthode n ° 2:groupby
sur l'ID.la source
g for _
quoi?g for (placeholder, g) in df.groupby('bla') if 'bla'
; le trait de soulignement est un symbole typique pour l'espace réservé d'un argument inévitable où nous ne voulons pas l'utiliser pour quoi que ce soit dans une expression de type lambda.sort
été déconseillée pour DataFrames en faveur de l'unsort_values
ou l' autre ousort_index
des questions-réponses SO liéesAvec Pandas version 0.17, vous pouvez définir 'keep = False' dans la fonction dupliquée pour obtenir tous les éléments en double.
la source
'all'
serait l'OMI plus logique et intuitive.il vous renverra toutes les lignes dupliquées.
Selon la documentation :
la source
Comme je ne peux pas commenter, donc poster comme réponse séparée
Pour trouver des doublons sur la base de plus d'une colonne, mentionnez chaque nom de colonne comme ci-dessous, et il vous renverra toutes les lignes dupliquées définies:
la source
Cela a fonctionné pour moi
la source
== True
,.duplicated()
retourne déjà un tableau booléen.En utilisant un élément logique ou et en définissant l'argument take_last de la méthode dupliquée pandas sur True et False, vous pouvez obtenir un ensemble de votre dataframe qui inclut tous les doublons.
la source
Ce n'est peut-être pas une solution à la question, mais pour illustrer des exemples:
Les sorties:
la source
sort("ID")
ne semble pas fonctionner maintenant, semble obsolète selon le document de tri , alors utilisezsort_values("ID")
plutôt pour trier après le filtre en double, comme suit:la source
Pour ma base de données dupliquée (keep = False) ne fonctionnait pas tant que la colonne n'était pas triée.
la source
df[df.duplicated(['ID'])==True].sort_values('ID')
la source