首页 > 解决方案 > 使用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,依此类推。

亲切的问候,

标签: pythonpandastime-seriesrolling-average

解决方案


要计算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

推荐阅读