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

29

我有一个数据框 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 是否有类似三元条件运算符的东西?

1个回答

38

在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

1
你说“不用pandas”,但是看起来你展示了如何使用pandas。这只是因为OP想要0/1,我们可以将bool转换为所需的输出吗?但是一般情况下我们没有真正的三元操作符吗? - Teepeemm
这个方法会不会引发 SettingWithCopyWarning 警告? - xicocaio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接