python - 使用python的一个数据框中每个类别的滚动平均值
问题描述
我有以下数据框:
YYYYMM | 平均(每月) | 类别 |
---|---|---|
202001 | 0.6666666666666666 | 猫1 |
202002 | 0.75 | 猫1 |
202003 | 1.0 | 猫1 |
202004 | 1.0 | 猫1 |
202005 | 1.0 | 猫1 |
202006 | 1.0 | 猫1 |
202007 | 1.0 | 猫1 |
202008 | 1.0 | 猫1 |
202009 | 0.3333333333333333 | 猫1 |
202010 | 0.375 | 猫1 |
202011 | 0.4 | 猫1 |
202012 | 0.8 | 猫1 |
202101 | 0.8333333333333334 | 猫1 |
202102 | 1.0 | 猫1 |
202103 | 0.8571428571428571 | 猫1 |
202104 | 0.5714285714285714 | 猫1 |
202105 | 1.0 | 猫1 |
202106 | 0.8333333333333334 | 猫1 |
202107 | 0.6666666666666666 | 猫1 |
202001 | 0.5294117647058824 | 猫2 |
202002 | 0.6666666666666666 | 猫2 |
202003 | 0.6842105263157895 | 猫2 |
202004 | 0.4 | 猫2 |
202005 | 0.7916666666666666 | 猫2 |
202006 | 0.48 | 猫2 |
202007 | 0.5789473684210527 | 猫2 |
202008 | 0.4117647058823529 | 猫2 |
202009 | 0.4666666666666667 | 猫2 |
202010 | 0.5454545454545454 | 猫2 |
202011 | 0.4583333333333333 | 猫2 |
202012 | 0.7241379310344828 | 猫2 |
202101 | 0.6111111111111112 | 猫2 |
202102 | 0.5135135135135135 | 猫2 |
202103 | 0.56 | 猫2 |
202104 | 0.35 | 猫2 |
202105 | 0.5333333333333333 | 猫2 |
202106 | 0.625 | 猫2 |
202107 | 0.0 | 猫2 |
...
还有更多类别
我现在想计算每个类别的 12 个月滚动平均值。pd.rolling 函数的问题是它在计算 cat2 中的滚动平均值时从 cat1 获取数据。以及来自 cat 2 的数据用于计算 cat 3,依此类推。
亲切的问候,
解决方案
要计算rolling
平均 per categorie
,您必须首先将数据帧分组categorie
df['roll_avg'] = df.groupby('categorie')['avg(monthly)'].rolling(12).mean().droplevel(0)
YYYYMM avg(monthly) categorie roll_avg
0 202001 0.666667 cat1 NaN
1 202002 0.750000 cat1 NaN
2 202003 1.000000 cat1 NaN
3 202004 1.000000 cat1 NaN
4 202005 1.000000 cat1 NaN
5 202006 1.000000 cat1 NaN
6 202007 1.000000 cat1 NaN
7 202008 1.000000 cat1 NaN
8 202009 0.333333 cat1 NaN
9 202010 0.375000 cat1 NaN
10 202011 0.400000 cat1 NaN
11 202012 0.800000 cat1 0.777083
12 202101 0.833333 cat1 0.790972
13 202102 1.000000 cat1 0.811806
14 202103 0.857143 cat1 0.799901
15 202104 0.571429 cat1 0.764187
16 202105 1.000000 cat1 0.764187
17 202106 0.833333 cat1 0.750298
18 202107 0.666667 cat1 0.722520
19 202001 0.529412 cat2 NaN
20 202002 0.666667 cat2 NaN
21 202003 0.684211 cat2 NaN
22 202004 0.400000 cat2 NaN
23 202005 0.791667 cat2 NaN
24 202006 0.480000 cat2 NaN
25 202007 0.578947 cat2 NaN
26 202008 0.411765 cat2 NaN
27 202009 0.466667 cat2 NaN
28 202010 0.545455 cat2 NaN
29 202011 0.458333 cat2 NaN
30 202012 0.724138 cat2 0.561438
31 202101 0.611111 cat2 0.568247
32 202102 0.513514 cat2 0.555484
33 202103 0.560000 cat2 0.545133
34 202104 0.350000 cat2 0.540966
35 202105 0.533333 cat2 0.519439
36 202106 0.625000 cat2 0.531522
37 202107 0.000000 cat2 0.483276
推荐阅读
- c++ - Qt5 ui,多个窗口:如何从窗口 1 访问窗口 2 中的 Ui 对象
- amazon-web-services - DynamoDB 更新所有项目的一列
- flyte - 跟随文档启动时出现lyft flyte错误?
- python - 指示参数应该是可变引用
- python - Qt库与Pycharm新安装不兼容
- typescript - Firebase/Firestore 文档未更新
- vb.net - Office Interop ReportItem 的 vb.net CreationTime 不正确
- asp.net - 当我在 IE 和 Edge 中打开 PRINT 对话框时,为什么 ASP.NET_SessionID 会发生变化?
- scapy - 在 Python 中使用 Scapy 过滤 OPC UA 数据包
- image - 渲染图像和体素化图像