我想比較的每一行,與其他列比較多行值
的問題是比較複雜的,但我試圖把它簡化此表中的值:
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
預先感謝您
我想比較的每一行,與其他列比較多行值
的問題是比較複雜的,但我試圖把它簡化此表中的值:
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
預先感謝您
使用assign
創建新列
使用df.le(df.A, 0)
列'A'
比較所有其它列
使用all(1)
找到所有列在那裏True
使用astype(int)
使其1
或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
您可以使用gt
或le
對相比,則獲得至少一個True
或all
Trues和最後投布爾面膜int
any
或all
:
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
您可以使用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
,如果你知道列名稱:
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。