Mam listę elementów, które prawdopodobnie mają problemy z eksportem. Chciałbym uzyskać listę zduplikowanych elementów, aby móc je ręcznie porównać. Kiedy próbuję użyć metody zduplikowanej pandy , zwraca ona tylko pierwszy duplikat. Czy istnieje sposób na zdobycie wszystkich duplikatów, a nie tylko pierwszego?
Mała podsekcja mojego zbioru danych wygląda następująco:
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
Mój kod wygląda obecnie tak:
df_bigdata_duplicates = df_bigdata[df_bigdata.duplicated(cols='ID')]
Jest tam kilka zduplikowanych przedmiotów. Ale kiedy używam powyższego kodu, otrzymuję tylko pierwszą pozycję. W dokumentacji API widzę, jak mogę uzyskać ostatni element, ale chciałbym mieć je wszystkie, aby móc je wizualnie sprawdzić, aby zobaczyć, dlaczego otrzymuję rozbieżności. Tak więc w tym przykładzie chciałbym uzyskać wszystkie trzy wpisy A036 i oba wpisy 11795 oraz wszelkie inne zduplikowane wpisy, zamiast tylko pierwszego. Każda pomoc jest jak najbardziej doceniana.
źródło
ID
, a nie„ identyczne wiersze w wielu lub we wszystkich kolumnach ”.Odpowiedzi:
Metoda nr 1: wydrukuj wszystkie wiersze, w których identyfikator jest jednym z identyfikatorów w zduplikowanych:
ale nie mogłem wymyślić dobrego sposobu na uniknięcie powtarzania się
ids
tyle razy. Wolę metodę nr 2:groupby
na dowodzie osobistym.źródło
g for _
zrobić?g for (placeholder, g) in df.groupby('bla') if 'bla'
; podkreślenie jest typowym symbolem zastępczym nieuniknionego argumentu, w którym nie chcemy go używać do niczego w wyrażeniu podobnym do lambda.sort
została uznana za przestarzałą dla DataFrames na rzecz jednejsort_values
lubsort_index
powiązanej z nią pytań i odpowiedziW wersji 0.17 Pandy możesz ustawić „keep = False” w funkcji zduplikowanej, aby uzyskać wszystkie zduplikowane elementy.
źródło
'all'
byłaby bardziej logiczna i intuicyjna IMO.zwróci z powrotem wszystkie zduplikowane wiersze.
Zgodnie z dokumentacją :
źródło
Ponieważ nie jestem w stanie komentować, zamieszczam jako oddzielną odpowiedź
Aby znaleźć duplikaty na podstawie więcej niż jednej kolumny, podaj nazwę każdej kolumny, jak poniżej, a otrzymasz wszystkie zduplikowane zestawy wierszy:
źródło
To zadziałało dla mnie
źródło
== True
,.duplicated()
już zwraca tablicę bool.Używając elementu logicznego lub i ustawiając argument take_last metody pandas duplicate na True i False, możesz uzyskać zestaw z ramki danych, który zawiera wszystkie duplikaty.
źródło
Może to nie jest rozwiązanie tego pytania, ale zilustrowanie przykładów:
Wyjścia:
źródło
sort("ID")
wydaje się, że teraz nie działa, wydaje się być przestarzała zgodnie z dokumentem sortowania , więc użyjsort_values("ID")
zamiast tego do sortowania po zduplikowanym filtrze, w następujący sposób:źródło
Dla mojej bazy danych zduplikowana (keep = False) nie działała, dopóki kolumna nie została posortowana.
źródło
df[df.duplicated(['ID'])==True].sort_values('ID')
źródło