【问题标题】:Pandas: Ternary conditional operator for setting a value in a DataFramePandas:用于在 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 的三元条件运算符?

【问题讨论】:

    标签: python pandas conditional


    【解决方案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吗?
    猜你喜欢
    • 2023-04-11
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 2022-01-02
    • 2021-02-19
    • 2014-10-19
    • 2010-10-20
    相关资源
    最近更新 更多