希望对以下问题提供一些帮助。 我目前有一个包含3列的熊猫数据框 - test1,test2,test3
我希望实现的是result_column,其逻辑将是:
1)如果test1中的值 AND test2> 0,然后返回test3的值
2)否则如果值test1 AND test2< 0,然后返回test3的 NEGATIVE 值
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
这是我第一次在python和pandas上发帖提问。如果此处的格式不是最佳,请提前道歉。感谢我能得到的任何帮助!
答案 0 :(得分:3)
我认为需要numpy.select
条件由AND
([[]]
)链接,或者按子集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
选择所有测试列,比较DataFrame.all
的ant test:
<div class="ui top attached tabular menu">
<a class="item" data-tab="first">First</a>
<a class="item" data-tab="second">Second</a>
</div>
<div class="ui bottom attached tab segment" data-tab="first">
First
</div>
<div class="ui bottom attached tab segment" data-tab="second">
Second
</div>
答案 1 :(得分:2)
巧妙使用np.sign
和逻辑
如果同时> 0
或< 0
,则产品为1
,否则产品为-1
或0
。如果两个> 0
,那么总和的符号为1
。如果< 0
两者的总和为-1
,则为0
。这些东西的产物正是我们想要的。
v = np.sign(df[['test1', 'test2']].values)
df.assign(result_column=v.prod(1) * np.sign(v.sum(1)) * df.test3 + 0)
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