Die pandas
drop_duplicates
Funktion eignet sich hervorragend zum "Eindeutigen" eines Datenrahmens. Eines der zu übergebenden Schlüsselwortargumente ist jedoch take_last=True
oder take_last=False
, während ich alle Zeilen löschen möchte, die Duplikate in einer Teilmenge von Spalten sind. Ist das möglich?
A B C
0 foo 0 A
1 foo 1 A
2 foo 1 B
3 bar 1 A
Als Beispiel möchte ich Zeilen löschen, die mit Spalten übereinstimmen, A
und C
daher sollten die Zeilen 0 und 1 gelöscht werden.
python
pandas
duplicates
Jamie Bull
quelle
quelle
df.reindex(df.iloc[:,[0,2]].drop_duplicates(keep=False).index)
?df.drop_duplicates(subset=[df.columns[0:2]], keep = False)
Ich möchte nur zu Bens Antwort auf drop_duplicates hinzufügen :
keep
: {'first', 'last', False}, Standard 'first'first: Löschen Sie Duplikate mit Ausnahme des ersten Vorkommens.
last: Löscht Duplikate mit Ausnahme des letzten Vorkommens.
False: Alle Duplikate löschen.
Wenn Sie also
keep
auf Falsch setzen, erhalten Sie die gewünschte Antwort.quelle
Wenn das Ergebnis in einem anderen Datensatz gespeichert werden soll:
oder
Wenn derselbe Datensatz aktualisiert werden muss:
In den obigen Beispielen werden alle Duplikate entfernt und eines beibehalten, ähnlich wie
DISTINCT *
in SQLquelle
benutze
groupby
undfilter
quelle
Tatsächlich erfordert das Löschen der Zeilen 0 und 1 nur (alle Beobachtungen, die übereinstimmende A und C enthalten, werden beibehalten.):
Aber ich vermute, was Sie wirklich wollen, ist Folgendes (eine Beobachtung mit übereinstimmenden A und C wird beibehalten.):
Bearbeiten:
Jetzt ist es also viel klarer:
quelle
df.drop_duplicates(['A','C'])
als Standard verwenden, dass eine Beobachtung die erste oder letzte nimmt, wie ich in der Frage erwähnt habe - obwohl ich gerade festgestellt habe, dass ich das Schlüsselwort falsch hatte, als ich aus dem Speicher schrieb. Ich möchte alle Zeilen löschen, die in den interessierenden Spalten identisch sind (A und C in den Beispieldaten).Probieren Sie diese verschiedenen Dinge aus
oder
oder
quelle