python - DF中类别更改时重置滚动计算
问题描述
我有一个看起来像这样的df:
Category Product Location Date formatted Volume
0 A TYPE_B Central 2019-04-01 13.0
1 A TYPE_B Central 2019-05-01 13.0
2 A TYPE_B Central 2019-06-01 12.0
3 A TYPE_B Central 2019-07-01 14.0
4 A TYPE_B Central 2019-08-01 14.0
5 A TYPE_B Central 2019-09-01 13.0
6 A TYPE_B Central 2019-10-01 14.0
7 A TYPE_B Central 2019-11-01 13.0
8 A TYPE_B Central 2019-12-01 13.0
9 A TYPE_B Central 2020-01-01 13.0
10 A TYPE_B Central 2020-02-01 13.0
11 A TYPE_B Central 2020-03-01 15.0
12 A TYPE_B East 2019-04-01 21.0
13 A TYPE_B East 2019-05-01 20.0
14 A TYPE_B East 2019-06-01 18.0
15 A TYPE_B East 2019-07-01 21.0
16 A TYPE_B East 2019-08-01 22.0
17 A TYPE_B East 2019-09-01 19.0
18 A TYPE_B East 2019-10-01 20.0
19 A TYPE_B East 2019-11-01 20.0
20 A TYPE_B East 2019-12-01 19.0
21 A TYPE_B East 2020-01-01 20.0
22 A TYPE_B East 2020-02-01 20.0
23 A TYPE_B East 2020-03-01 27.0
我正在尝试从数据的开始(“2019-04-01”)和结束(“2020-03-01”)时间范围计算每个位置的滚动 3 个月量,到目前为止,我正在使用以下代码:
df['Rolling_3_] = df.loc.iloc[:,4].rolling(window=4).mean()
这给了我整个数据框的滚动 3 个月平均值。但是,有谁知道我如何重新开始滚动月份计算,以便当它到达另一个“位置”(例如“东部”)时,它将计算该位置的滚动 3 个月平均值并移动到下一个位置,重新开始计算?本质上计算整个数据集的滚动 3 个月,但这些值适用于该位置。有没有办法可以用日期本身来做到这一点?例如,当“2019-04-01”再次出现时,计算重新开始。
非常感谢您提前提供任何帮助/建议!
亲切的问候,
解决方案
你可以做一个groupby:
df.groupby(['Category','Product','Location']).Volume.rolling(3).mean()
给你:
Category Product Location
A TYPE_B Central 0 NaN
1 NaN
2 12.666667
3 13.000000
4 13.333333
5 13.666667
6 13.666667
7 13.333333
8 13.333333
9 13.000000
10 13.000000
11 13.666667
East 12 NaN
13 NaN
14 19.666667
15 19.666667
16 20.333333
17 20.666667
18 20.333333
19 19.666667
20 19.666667
21 19.666667
22 19.666667
23 22.333333
Name: Volume, dtype: float64
要将其放入您的数据框中,由于索引的不同,您需要传递底层的 numpy 数组
# notice `values` at the end
df['rolling_mean'] = df.groupby(['Category','Product','Location']).Volume.rolling(3).mean().values
推荐阅读
- java - 相对 Xpath 在 Maven TestNg 中不起作用,但绝对路径有效
- swift - 使用 Swift 5 检查一个字符串是否是另一个字符串的子字符串
- rpa - 表单识别器 Http 请求
- php - 验证 $_POST['date'] 以与 SQL Server 日期列进行比较
- rxjs - 在 RxJS 中获得第一个履行的承诺
- python - 如何为 csv.writer 指定编码类型?
- java - 2.0.1.RELEASE 中缺少 Aerospike 弹簧数据 @Bin 注释
- python - Geany IDE 代码编辑器将 GUI 中的值插入到实际代码中
- performance - React native flatlist only with video is not loading video after some items
- maple - 绘制之间包含的旋转实体