将 pandas 数据框的多列与一列进行比较

piy*_*sal 4 python compare dataframe pandas

我有一个数据框:df-

    A   B   C   D   E
0   V   10  5   18  20
1   W   9   18  11  13
2   X   8   7   12  5
3   Y   7   9   7   8
4   Z   6   5   3   90
Run Code Online (Sandbox Code Playgroud)

我想添加一列“Result”,如果“E”列中的值大于 B、C 和 D 列中的值,则该列应返回 1,否则返回 0。

输出应该是:

    A   B   C   D   E   Result
0   V   10  5   18  20  1
1   W   9   18  11  13  0
2   X   8   7   12  5   0
3   Y   7   9   7   8   0
4   Z   6   5   3   90  1
Run Code Online (Sandbox Code Playgroud)

对于几列,我会使用如下逻辑: if(and(E>B,E>C,E>D),1,0),但我必须将大约 20 列(从 B 到 U)与列名称 ' V'。此外,数据框有大约 10 万行。

我在用

df['Result']=np.where((df.ix[:,1:20])<df['V']).all(1),1,0)
Run Code Online (Sandbox Code Playgroud)

它给出了内存错误。

jez*_*ael 11

一种可能的解决方案是比较 innumpy并最后将布尔掩码转换为ints:

df['Result'] = (df.iloc[:, 1:4].values < df[['E']].values).all(axis=1).astype(int)
print (df)
   A   B   C   D   E  Result
0  V  10   5  18  20       1
1  W   9  18  11  13       0
2  X   8   7  12   5       0
3  Y   7   9   7   8       0
4  Z   6   5   3  90       1
Run Code Online (Sandbox Code Playgroud)

  • @panda - 使用 `df['Result'] = df[['B','C','D','E']].gt(0).sum(axis=1).astype(int)` , `gt` 是 `&gt;`, [`gt`](http://pandas.pydata.org/pandas-docs/stable/ generated/pandas.DataFrame.gt.html) (3认同)
  • @panda - 使用 `ge` (大于或等于),如 `df['Result'] = df[['B','C','D','E']].ge(0).sum(axis =1).astype(int)` (2认同)