2017-03-07 54 views
1

我想比較的每一行,與其他列比較多行值

的問題是比較複雜的,但我試圖把它簡化此表中的值:

 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 

結果應該是這樣的:

在這裏,在索引0:1.3比B,C和d的值越大,則我們返回1,否則是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 

預先感謝您

回答

4

使用assign創建新列
使用df.le(df.A, 0)'A'比較所有其它列
使用all(1)找到所有列在那裏True
使用astype(int)使其10

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

您可以使用gtle對相比,則獲得至少一個Trueall Trues和最後投布爾面膜intanyall

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 

另一種解決方案:

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

您可以使用idxmax

df['result'] = (df.idxmax(axis=1)== 'A').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 
0

,如果你知道列名稱:

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

,如果你知道想要的工作與列命令你可以這樣做:在你的榜樣

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

那些會給出相同的輸出。 最後的「astype(int)」將布爾值轉換爲0/1。