【问题标题】:rolling 30 days in pandas在熊猫中滚动 30 天
【发布时间】:2021-03-19 21:13:31
【问题描述】:

我有一个数据集:

import pandas as pd 

df = pd.DataFrame({
        'ID':  ['27459', '27459', '27459', '27459', '27459', '27459', '27459', '48002', '48002', '48002'],
        'Invoice_Date': ['2020-06-26', '2020-06-29', '2020-06-30', '2020-07-14', '2020-07-25', 
                         '2020-07-30', '2020-08-02', '2020-05-13', '2020-06-20', '2020-06-28'],
        'Difference_Date': [0,3,1,14,11,5,3,0,38,8],
        })
df

我需要添加另一列,即滚动 30 天的平均值。我尝试使用rolling,但它给了我错误window must be an integer。由于这是基于客户的数据,因此也需要 groupby ID

我的预期输出是:

    ID      Invoice_Date    Difference_Date   Average
0   27459   2020-06-26      0                 0.00
1   27459   2020-06-29      3                 1.50
2   27459   2020-06-30      1                 1.33
3   27459   2020-07-14      14                4.50
4   27459   2020-07-25      11                5.80
5   27459   2020-07-30      5                 10.00
6   27459   2020-08-02      3                 8.25
7   48002   2020-05-13      0                 0.00
8   48002   2020-06-20      38                38.00
9   48002   2020-06-28      8                 23.00

是否有任何有效的解决方法来计算滚动 30 天的平均值?

【问题讨论】:

标签: python pandas


【解决方案1】:

这是因为 pandas 需要一个DatetimeIndex 来做df.rolling('30D')

import pandas as pd 

df = pd.DataFrame({
        'ID':  ['27459', '27459', '27459', '27459', '27459', '27459', '27459', '48002', '48002', '48002'],
        'Invoice_Date': ['2020-06-26', '2020-06-29', '2020-06-30', '2020-07-14', '2020-07-25', 
                         '2020-07-30', '2020-08-02', '2020-05-13', '2020-06-20', '2020-06-28'],
        'Difference_Date': [0,3,1,14,11,5,3,0,38,8],
        })
df.index = pd.DatetimeIndex(df['Invoice_Date'])
df = df.sort_index()
df.rolling('30D')

【讨论】:

  • 如果我还需要根据 ID 对它进行排序怎么办?
  • 使用滚动索引计算您需要的任何内容,然后按 ID 排序?您能否解释一下为什么需要按 ID 对其进行排序?
  • 因为数据是基于客户的数据。所以滚动 30 天应该根据每个客户计算
  • 这听起来像一个 groupby:试试df.groupby('ID').rolling('30D')
猜你喜欢
  • 1970-01-01
  • 2018-07-30
  • 2021-08-20
  • 2018-06-26
  • 2017-03-30
  • 2019-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多