使用基于现有行值的条件在Pandas中创建新列并返回另一行的值

时间:2018-03-15 07:10:50

标签: python pandas

希望对以下问题提供一些帮助。 我目前有一个包含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上发帖提问。如果此处的格式不是最佳,请提前道歉。感谢我能得到的任何帮助!

2 个答案:

答案 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,否则产品为-10。如果两个> 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