【问题标题】:Calculating percentage change in pandas dataframe compared to baseline value计算熊猫数据框与基线值相比的百分比变化
【发布时间】:2020-05-13 21:34:35
【问题描述】:

我有一个 pandas 数据框,我想计算与起始值相比的百分比差异。有没有办法使用 pct_change() 来完成这个任务?

例如

我的数据

 date         close
2020-05-08    100
2020-05-11    102
2020-05-12    108

我希望更改看起来像

 date         close  change (%)
2020-05-08    100     0
2020-05-11    102     2
2020-05-12    108     8

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    你可以的

    df['change'] = df['close'].div(df['close'].iloc[0]).sub(1).mul(100)
    

    或

    df['change'] = (df.close/df.close.iloc[0] - 1) * 100
    

    输出:

             date  close  change
    0  2020-05-08    100     0.0
    1  2020-05-11    102     2.0
    2  2020-05-12    108     8.0
    

    【讨论】:

    • 第二个看起来更好更简洁的解决方案。 +1。
    • 第二个正是我要找的,谢谢你的帮助!
    【解决方案2】:

    编辑:正如大卫所建议的,有比这更好的解决方案。我会留下答案,让你们知道不该做什么:)。

    您始终可以使用额外的列来提供帮助。这很容易:

    start_value = 100 #or access through the index
    
    df['beginning'] = start_value
    df['change (%)'] = 100 * (df.close/df.beginning - 1)
    df
    

    输出:

        date    close   beginning   change (%)
    0   2020-05-08  100     100     0.0
    1   2020-05-11  102     100     2.0
    2   2020-05-12  108     100     8.0
    

    【讨论】:

    • 我认为实际上使用额外的列会更清楚,尤其是当您开始遇到更复杂的问题时(例如,将多行与单个基线进行比较,同时仍控制许多其他列)
    【解决方案3】:

    是的,这可以使用pct_change() 来完成。

    df['change'] = (df['close'].pct_change().fillna(0).add(1).cumprod().sub(1))*100
    

    如果不关心方向(+/-),那么也可以取绝对值:

    df['change'] = (df['close'].pct_change().fillna(0).add(1).cumprod().sub(1).abs())*100
    

    【讨论】:

    • 可爱的解决方案!
    猜你喜欢
    • 2020-04-17
    • 2016-05-07
    • 1970-01-01
    • 2022-11-19
    • 2023-01-02
    • 2015-10-07
    • 2020-09-21
    • 2021-01-05
    • 1970-01-01
    相关资源
    最近更新 更多