Ich suche nach einer Möglichkeit, das Äquivalent zu SQL zu erreichen
SELECT DISTINCT col1, col2 FROM dataframe_table
Der Pandas SQL-Vergleich hat nichts zu bieten distinct
.
.unique()
funktioniert nur für eine einzelne Spalte, also könnte ich die Spalten wohl zusammenfassen oder in eine Liste / ein Tupel einfügen und auf diese Weise vergleichen, aber dies scheint etwas zu sein, das Pandas auf eine native Art und Weise tun sollten.
Vermisse ich etwas Offensichtliches oder gibt es keine Möglichkeit, dies zu tun?
df.apply(pd.Series.unique)
aber dies funktioniert nicht, wenn die Anzahl der eindeutigen Werte in den Spalten variiert, sodass Sie ein Diktat der Spaltennamen als Schlüssel und der eindeutigen Werte als WerteAntworten:
Mit der
drop_duplicates
Methode können Sie die eindeutigen Zeilen in einem DataFrame abrufen:Sie können das
subset
Schlüsselwortargument auch angeben, wenn Sie nur bestimmte Spalten verwenden möchten, um die Eindeutigkeit zu bestimmen. Siehe die Dokumentzeichenfolge .quelle
df.drop_duplicates()
standardmäßig nicht um eine Inplace-Methode handelt. Daher wird ein neuer DataFrame zurückgegeben (df
unverändert). Dies ist ein ziemlich normales Verhalten, kann aber dennoch nützlich sein.Ich habe verschiedene Lösungen ausprobiert. Zuerst war:
und es funktioniert gut für Nicht-Objektdaten Eine andere Möglichkeit, dies zu tun und Fehler zu vermeiden (für den Typ der Objektspalten), besteht darin, drop_duplicates () anzuwenden.
Sie können dazu auch SQL verwenden, aber in meinem Fall hat es sehr langsam funktioniert:
quelle
Es gibt keine
unique
Methode für eine df. Wenn die Anzahl der eindeutigen Werte für jede Spalte gleich wäre, würde Folgendes funktionieren:df.apply(pd.Series.unique)
Wenn nicht, wird eine Fehlermeldung angezeigt. Ein anderer Ansatz wäre, die Werte in einem Diktat zu speichern, das auf dem Spaltennamen angegeben ist:quelle
np.unique(df[['column1','column2']].values)
Um ein ähnliches Problem zu lösen, verwende ich
groupby
:Ob dies angemessen ist, hängt jedoch davon ab, was Sie mit dem Ergebnis tun möchten (in meinem Fall wollte ich nur das Äquivalent von
COUNT DISTINCT
wie gezeigt).quelle
Ich denke, dass die Verwendung
drop duplicate
manchmal je nach Datenrahmen nicht so nützlich ist.Ich habe das gefunden:
Und arbeite für mich!
https://riptutorial.com/pandas/example/26077/select-distinct-rows-across-dataframe
quelle
Sie können die Sätze der Spalten nehmen und einfach den kleineren Satz vom größeren Satz subtrahieren:
quelle