【问题标题】:Calculate n day growth rate in pandas计算 pandas 的 n 天增长率
【发布时间】:2020-09-09 05:49:33
【问题描述】:

我有一个如下的数据框:

'country_code', 'count_date', 'case_count'
CAN           ,  2020-09-01 ,  1700000
CAN           ,  2020-08-31 ,  1650000
...           ,  ....       ,  ....
SGP           ,  ....       ,  ....
...           ,  ....       ,  ....
USA           ,  ....       ,  ....
...           ,  ....       ,  ....

排序为:

df = df.sort_values(['country_code','count_date'], ascending=[True,False])

假设 f(x) 是日期 x 的 case_count,那么我需要计算:

(f(x) - f(x-7))/(f(x-8) - f(x-15)

每个国家代码

我可以如下计算连续日期之间的差异:

df['dailynew_cases'] = df.groupby('country_code')['case_count'].diff(-1)

但是如何计算7天(或n天)的增长率并将其保存在同一个DF中的另一列?

编辑#1: pct_change 函数与所需的输出不匹配。以下是 2020 年 8 月 29 日美国的值

case_count = [5867633.0, 5573695.0, 5529672.0, 5248806.0] 
count_date = [datetime.date(2020, 8, 28), datetime.date(2020, 8, 21), datetime.date(2020, 8, 20), datetime.date(2020, 8, 14)]

期望的输出是(5867633.0-5573695.0)/(5529672.0-5248806.0) = 1.0465 但是 pct_change 给出 0.0518

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    要获取增长率,您可以使用pct_change

    df['growth'] =  df.groupby('country_code')['case_count'].pct_change(periods=7)
    

    【讨论】:

    • 为此我必须按升序对日期进行排序?
    【解决方案2】:

    我可以使用shift解决这个问题

    df['growth_rate'] = df.groupby('country_code').case_count.transform(lambda x: (x.shift(-1) - x.shift(-n)) / (x.shift(-n-1) - x.shift(-n-n))*100)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-05
      相关资源
      最近更新 更多