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
- True
是 1.0
和 False
是0.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
我有一个数据框 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
- True
是 1.0
和 False
是0.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