2017-03-07 3 views
1

ich für jede Zeile vergleichen will, Werte von A mit den anderen SpaltenVergleichen Sie mehrere Zeilenwerte

Das Problem ist komplexer, aber ich versuchte, es in dieser Tabelle zu vereinfachen:

 A B C D 
0 1.3 1.0 1.1 1 
1 2.5 2.9 2.6 3 
2 3.1 3.0 3.2 2 

Das Ergebnis wie folgt aussehen sollte:

Hier im Index 0: 1,3 größer als die Werte in B, C und D, dann wir 1 zurückkehren, sonst ist es 0

 A B C D result 
0 1.3 1.0 1.1 1  1 
1 2.5 2.9 2.6 3  0 
2 3.1 3.0 3.2 2  0 

Vielen Dank im Voraus

Antwort

4

Verwenden assign neue Spalte
Verwenden df.le(df.A, 0) erstellen Spalte 'A' für alle anderen Spalten
Verwenden all(1) zu vergleichen, wo True für alle Spalten zu finden
Verwenden astype(int) machen 1 oder 0

df.assign(result=df.lt(df.A, 0).all(1).astype(int)) 

    A B C D result 
0 1.3 1.0 1.1 1  1 
1 2.5 2.9 2.6 3  0 
2 3.1 3.0 3.2 2  0 
2

Sie können gt oderverwendenfür vergleichen, dann any oder all für mindestens eine True oder all Trues und letzte Guss boolean Maske int erhalten:

df['result'] = (~df[['B','C','D']].gt(df.A, axis=0).any(1)).astype(int) 
print (df) 
    A B C D result 
0 1.3 1.0 1.1 1  1 
1 2.5 2.9 2.6 3  0 
2 3.1 3.0 3.2 2  0 

Eine andere Lösung:

df['result'] = df[['B','C','D']].le(df.A, axis=0).all(1).astype(int) 
print (df) 
    A B C D result 
0 1.3 1.0 1.1 1  1 
1 2.5 2.9 2.6 3  0 
2 3.1 3.0 3.2 2  0 
1

können Sie verwenden idxmax:

df['result'] = (df.idxmax(axis=1)== 'A').astype(int) 

Ausgabe:

A B C D result 
0 1.3 1.0 1.1 1  1 
1 2.5 2.9 2.6 3  0 
2 3.1 3.0 3.2 2  0 
0

, wenn Sie die Spaltennamen kennen tun:

df['results']=(df.loc[:,'A']>df.loc[:,'B':'D'].max(axis=1)).astype(int) 

wenn Sie wissen, mit Spalten arbeiten möchten bestellen Sie tun können:

df['results']=(df.iloc[:,0]>df.iloc[:,1:].max(axis=1)).astype(int) 

auf Ihrem Beispiel diejenigen, die gleiche Ausgabe geben . Der "astype (int)" am Ende konvertiert den booleschen Wert in 0/1.

Verwandte Themen