Python 大熊猫滚动30天

Python 大熊猫滚动30天,python,pandas,Python,Pandas,我有一个数据集: 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

我有一个数据集:

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天期间的平均值。我尝试使用
滚动
,但它给了我错误
窗口必须是整数
。由于这是基于客户的数据,因此也需要按
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天的平均值是否有任何有效的解决方法?

这是因为熊猫需要进行
df。滚动('30D')


这回答了你的问题吗?这回答了你的问题吗?如果我也需要根据ID对其进行排序,该怎么办?使用滚动索引计算您需要的内容,然后根据ID进行排序?您能否澄清为什么需要按ID排序?因为数据是基于客户的数据。因此,滚动30天应该根据每个客户计算。这听起来像一个groupby:try
df.groupby('ID')。滚动('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')