您可以将日期设置为 index、groupby Category 并获取 28 天滚动窗口的总和:
import pandas as pd
import io
data = '''ID Category Date Sales
1 AA 7/02/2022 1
1 AA 31/01/2022 3
1 AA 24/01/2022 5
1 AA 10/01/2022 7
1 AA 03/01/2022 9
2 BB 7/02/2022 2
2 BB 31/01/2022 4
2 BB 24/01/2022 6
2 BB 17/01/2022 8
2 BB 10/01/2022 10'''
df = pd.read_csv(io.StringIO(data), sep='\s+')
df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y')
result_df = df.set_index('Date').sort_index().groupby('Category')['Sales'].rolling("28D").sum().reset_index()
输出:
|
类别 |
日期 |
销售量 |
0 |
AA |
2022-01-03 00:00:00 |
9 |
1 |
AA |
2022-01-10 00:00:00 |
16 |
2 |
AA |
2022-01-24 00:00:00 |
21 |
3 |
AA |
2022-01-31 00:00:00 |
15 |
4 |
AA |
2022-02-07 00:00:00 |
9 |
5 |
BB |
2022-01-10 00:00:00 |
10 |
6 |
BB |
2022-01-17 00:00:00 |
18 |
7 |
BB |
2022-01-24 00:00:00 |
24 |
8 |
BB |
2022-01-31 00:00:00 |
28 |
9 |
BB |
2022-02-07 00:00:00 |
20 |