基于多种条件的新列

时间:2018-03-29 10:47:07

标签: python pandas conditional

     a    b
0  100   90
1   30  117
2   90   99
3  200   94

我想创建一个包含下一个条件的新df["c"]

  • 如果a > 50和b进入(a ± 0.5a),则c = a
  • 如果a > 50和b不在(a ± 0.5a),则c = b
  • 如果a <= 50,则*c = a*

输出应为:

     a    b    c
0  100   90  100
1   30  117   30
2   90   99   90
3  200   94   94

我试过了:

df['c'] = np.where(df.eval("0.5 * a <= b <= 1.5 * a"), df.a, df.b)

但我不知道如何在这句话中包含最后一个条件(If a <= 50, then c = a)

1 个答案:

答案 0 :(得分:4)

你几乎就在那里,你只需要在你的eval字符串中添加一个or子句。

np.where(df.eval("(0.5 * a <= b <= 1.5 * a) or (a <= 50)"), df.a, df.b)
#                                           ~~~~~~~~~~~~
array([100,  30,  90,  94])