2017-07-12 22 views
2

Ich suche nach den eindeutigen Werten für jede Spalte in meinem Datenframe. (Wert einzigartig für den gesamten Datenrahmen)Finde eindeutige Werte für jede Spalte

 Col1   Col2   Col3 
1  A    A    B 
2  C    A    B 
3  B    B    F 

Col1 hat C als einen eindeutigen Wert hat Col2 keine und Col3 hat F.

Alles Genie Ideen? Danke !

+0

Priorisieren Sie Effizienz oder Code Eleganz? Wie groß ist Ihr Dataframe? – ntg

Antwort

3

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 
+0

Vielen Dank! es funktionierte ! – hdatas

+0

Froh kann helfen, danke. Ich füge auch Lösung hinzu, wenn mehrere eindeutige Werte pro Gruppe mit einigen Spalten ohne eindeutige Werte vorhanden sind. – jezrael

0

Ich glaube nicht, dass dies genau das ist, was Sie wollen, sondern als nützliche Informationen - Sie eindeutige Werte für einen Datenrahmen mit numpy des .unique() wie so finden :

>>> np.unique(df[['Col1', 'Col2', 'Col3']]) 
['A' 'B' 'C' 'F'] 

Sie können auch eindeutige Werte für eine bestimmte Spalte erhalten, z Col3:

>>> df.Col3.unique() 
['B' 'F'] 
Verwandte Themen