python - 按数据框中的某一列分组并汇总最近 12 个月的数据
问题描述
我正在尝试汇总value
过去 12 个月的数据 ( ) 并id
在数据框中分组。这是我拥有的数据框。我想添加另一列 -last 12 month
并聚合value
过去 12 个月的列,按id
.
我想添加最后一列以获得如下所示的数据
id month value Last_12_month
1 Jan-19 2 2
1 Feb-19 32 34
1 Mar-19 4 38
1 Apr-19 6 44
1 May-19 7 51
1 Jun-19 83 134
1 Jul-19 2 136
1 Aug-19 3 139
1 Sep-19 4 143
1 Oct-19 6 149
1 Nov-19 7 156
1 Dec-19 8 164
1 Jan-20 44 206
1 Feb-20 664 838
1 Mar-20 77 911
1 Apr-20 4 909
1 May-20 2 904
1 Jun-20 567 1,388
1 Jul-20 888 2,274
1 Aug-20 43 2,314
2 Apr-19 24 24
2 May-19 5 29
2 Jun-19 67 96
2 Jul-19 88 184
2 Aug-19 5 189
2 Sep-19 2 191
2 Oct-19 235 426
2 Nov-19 6 432
2 Dec-19 788 1,220
2 Jan-20 96 1,316
2 Feb-20 4 1,320
2 Mar-20 3 1,323
2 Apr-20 25 1,324
2 May-20 56 1,375
2 Jun-20 7 1,315
2 Jul-20 88 1,315
2 Aug-20 88 1,398
2 Sep-20 89 1,485
2 Oct-20 87 1,337
2 Nov-20 6 1,337
解决方案
这应该有效(简化您的示例):
import numpy as np
import pandas as pd
idx = [i for idx in [[1] * 13, [2] * 13] for i in idx ]
df = pd.DataFrame({'month': ['month'] * 26,
'value': np.arange(1, 27),
'id': idx}).set_index('id')
df['last_12_months'] = (df.groupby('id')['value']
.apply(lambda x: x.rolling(12, min_periods=1).sum()))
这使:
month value last_12_months
id
1 month 1 1.0
1 month 2 3.0
1 month 3 6.0
1 month 4 10.0
1 month 5 15.0
1 month 6 21.0
1 month 7 28.0
1 month 8 36.0
1 month 9 45.0
1 month 10 55.0
1 month 11 66.0
1 month 12 78.0
1 month 13 90.0
2 month 14 14.0
2 month 15 29.0
2 month 16 45.0
2 month 17 62.0
2 month 18 80.0
2 month 19 99.0
2 month 20 119.0
2 month 21 140.0
2 month 22 162.0
2 month 23 185.0
2 month 24 209.0
2 month 25 234.0
2 month 26 246.0
您不需要在前 12 个值中min_periods
获得NaN
推荐阅读
- laravel - Flutter - Pusher & EchoClient - 连接但不接收来自通道的事件
- javascript - Tampermonkey 方法为页面上的所有“.jpg.webp”和“.png.webp”图像删除“.webp”扩展名?
- python - 使用相同的记录器通过 python 日志记录分离文件输出
- r - 任何列中存在特定值的子集数据框
- go - 检查项目是否存在并且是真还是假
- python - 使用 discord.py 检测和踢 alt
- amazon-web-services - Cloudformation 如果有两个或
- sql - 如何在 SQL Server 数据库中添加与同一服务器上的另一个用户具有相同权限的用户?
- docker - 如何在重新启动或尝试失败后使用 compose 自动重新启动 docker 容器?
- powerbi - 在 Power BI 中隐藏第二个表头