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)