Pandas:三元条件运算符,用于在 DataFrame 中设置值

Pandas: Ternary conditional operator for setting a value in a DataFrame

我有一个数据框 pd。我想更改列 irr 的值,具体取决于它是高于还是低于阈值。

如何在一行中完成此操作?现在我有

pd['irr'] = pd['irr'][pd['cs']*0.63 > pd['irr']] = 1.0
pd['irr'] = pd['irr'][pd['cs']*0.63 <=  pd['irr']] = 0.0

问题当然是我改了irr,下一行再检查一下

pandas 有类似三元条件运算符的东西吗?

在 pandas 中没有,在 numpy 中是。

您可以使用 numpy.where 或将条件创建的 boolean Series 转换为 float - True1.0False0.0:

pd['irr'] = np.where(pd['cs']*0.63 > pd['irr'], 1.0, 0.0)

或:

pd['irr'] = (pd['cs']*0.63 > pd['irr']).astype(float)

样本:

pd = pd.DataFrame({'cs':[1,2,5],
                   'irr':[0,100,0.04]})

print (pd)
   cs     irr
0   1    0.00
1   2  100.00
2   5    0.04

pd['irr'] = (pd['cs']*0.63 > pd['irr']).astype(float)
print (pd)
   cs  irr
0   1  1.0
1   2  0.0
2   5  1.0