如何在一个级别上获得前 4 周的销售额
How to get previous 4 week sales at a level
我想找到 Python 中某个水平的前四个星期的销售额。比如说
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
对于 1 AA 7/02/2022 最后四个星期的总和将为 9(因为 17/01/2022 包不存在并且必须包括当前行日期)
您可以将日期设置为索引,按类别分组并计算 28 天滚动 window 销售额的总和:
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()
输出:
Category
Date
Sales
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
我想找到 Python 中某个水平的前四个星期的销售额。比如说
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
对于 1 AA 7/02/2022 最后四个星期的总和将为 9(因为 17/01/2022 包不存在并且必须包括当前行日期)
您可以将日期设置为索引,按类别分组并计算 28 天滚动 window 销售额的总和:
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()
输出:
Category | Date | Sales | |
---|---|---|---|
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 |