2016-07-26 7 views
2

Ich versuche Pandas in Python zu verwenden, um dieses Problem zu lösen. Ich habe einen Datenrahmen mit fast 1000 Spalten. Für jede Spalte, würde ich gerne einen Booleschen Wert für eine mathematische Operation zurückzukehren - speziell Column A-Column n => 0.Iterate durch Spalten, um jedes mit einer bestimmten Spalte in Python zu vergleichen

"ID" "Column A" "Column B" "Column C" "Column D" 
"A" 100   200   300   50 
"B" 75   20   74   500 

Nehmen wir an, Column A die Zeile würde ich für den Vergleich verwenden möchten. Ich möchte, dass das Ergebnis ein Datenrahmen ist, der wie folgt aussieht:

Danke für Ihre Hilfe.

Antwort

0

Dies sollte es tun:

c = 'Column A' 
d = df.set_index('ID') 
lt = d.drop(c, axis=1).lt(d[c], axis=0) 
pd.concat([d[c], lt], axis=1).reset_index() 

enter image description here

1

Sie eine lambda Funktion anwenden können, die jede Spalte Reihe von der Zielspalte subtrahiert und dann überprüft, ob das Ergebnis größer als oder gleich Null ist (ge(0)).

d = {'Column A': {'A': 100, 'B': 75}, 
    'Column B': {'A': 200, 'B': 20}, 
    'Column C': {'A': 300, 'B': 74}, 
    'Column D': {'A': 50, 'B': 500}} 
df = pd.DataFrame(d) 

col = "Column A" 
other_cols = [c for c in df if c != col] 

>>> pd.concat([df[[col]], 
       df[other_cols].apply(lambda series: df[col].sub(series).ge(0))], axis=1) 
    Column A Column B Column C Column D 
ID          
A  100 False False  True 
B   75  True  True False 
0
df = df.set_index("ID") 
dd = df.apply(lambda x: x.lt(df["Column A"])) 
dd["Column A"] = df["Column A"] 
dd 

     Column A Column B Column C Column D 
ID          
A  100 False False  True 
B   75  True  True False