Sie stack
für Series
verwenden können, dann drop_duplicates
- keep=False
entfernen alle, reindex
von reset_index
und zuletzt ersten Ebene entfernen:
df = df.stack()
.drop_duplicates(keep=False)
.reset_index(level=0, drop=True)
.reindex(index=df.columns)
print (df)
Col1 C
Col2 NaN
Col3 F
dtype: object
Lösung oben funktioniert schön, wenn nur ein eindeutiger Wert pro Spalte.
Ich versuche allgemeinere Lösung zu erstellen:
print (df)
Col1 Col2 Col3
1 A A B
2 C A X
3 B B F
s = df.stack().drop_duplicates(keep=False).reset_index(level=0, drop=True)
print (s)
Col1 C
Col3 X
Col3 F
dtype: object
s = s.groupby(level=0).unique().reindex(index=df.columns)
print (s)
Col1 [C]
Col2 NaN
Col3 [X, F]
dtype: object
Priorisieren Sie Effizienz oder Code Eleganz? Wie groß ist Ihr Dataframe? – ntg