比较多个行值

时间:2017-03-07 08:34:22

标签: python python-3.x pandas dataframe

我想比较每一行,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

提前谢谢

4 个答案:

答案 0 :(得分:5)

使用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

答案 1 :(得分:2)

您可以使用gtle进行比较,然后使用anyall获取至少一个Trueall来宾和最后一次将布尔掩码转换为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。