想得到以下问题的帮助。
我现在有一个panda数据框架,它有3列-test1、test2、test3
我希望实现的是result_列中的结果,其中的逻辑是:
1)如果test1和test2中的值大于0,则返回test3的值
2)否则,如果test1和test2的值小于0,则返回test3的负值
3)否则返回0
test1 test2 test3 result_column
0 0.5 0.1 1.25 1.25
1 0.2 -0.2 0.22 0
2 -0.3 -0.2 1.12 -1.12
3 0.4 -0.3 0.34 0
4 0.5 0 0.45 0
这是我第一次发布关于蟒蛇和熊猫的问题如果这里的格式不是最佳的,请提前道歉谢谢你能帮我!
最佳答案
我认为需要numpy.select
以&
(AND
)链接条件,或按子集选择所有测试列,按[[]]
比较ant测试:
m1 = (df.test1 > 0) & (df.test2 > 0)
#alternative
#m1 = (df[['test1', 'test2']] > 0).all(axis=1)
m2 = (df.test1 < 0) & (df.test2 < 0)
#alternative
#m2 = (df[['test1', 'test2']] < 0).all(axis=1)
df['result_column'] = np.select([m1,m2], [df.test3, -df.test3], default=0)
print (df)
test1 test2 test3 result_column
0 0.5 0.1 1.25 1.25
1 0.2 -0.2 0.22 0.00
2 -0.3 -0.2 1.12 -1.12
3 0.4 -0.3 0.34 0.00
4 0.5 0.0 0.45 0.00