我想比较每一行,A与其他列的值
问题更复杂但我试图在此表中简化它:
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
提前谢谢
答案 0 :(得分:5)
使用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
答案 1 :(得分:2)
您可以使用gt
或le
进行比较,然后使用any
或all
获取至少一个True
或all
来宾和最后一次将布尔掩码转换为int
:
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
答案 2 :(得分: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
答案 3 :(得分: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。