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

Posted

技术标签:

【中文标题】Pandas:用于在 DataFrame 中设置值的三元条件运算符【英文标题】:Pandas: Ternary conditional operator for setting a value in a DataFrame 【发布时间】:2018-03-13 12:14:45 【问题描述】:

我有一个数据框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】:

在 pandas 中没有,在 numpy 中是。

您可以使用numpy.where 或将条件创建的boolean Series 转换为float - Trues 是1.0Falses 是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

【讨论】:

你说“pandas no”,但似乎你展示了如何在 pandas 中做到这一点。这仅仅是因为 OP 想要 0/1,我们可以将 bool 转换为所需的输出吗?但是我们一般没有真正的三元运算? 这种方法不会提高SettingWithCopyWarning吗?

以上是关于Pandas:用于在 DataFrame 中设置值的三元条件运算符的主要内容,如果未能解决你的问题,请参考以下文章

根据条件选择行并从向量中设置值

是否可以在没有设置器的情况下在属性中设置值?

获取TypeError:在Pandas Dataframe中设置索引时,'list'对象不可调用

如何使用 Javascript 在 CKEditor 中设置值?

无法在 LiveData 中设置值

尝试在 NSMuableDictionary 中设置值时应用程序崩溃