我想比较的每一行,与其他列比较多行值
的问题是比较复杂的,但我试图把它简化此表中的值:
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。