I have the following dataframe:
YYYYMM | avg(monthly) | categorie |
---|---|---|
202001 | 0.6666666666666666 | cat1 |
202002 | 0.75 | cat1 |
202003 | 1.0 | cat1 |
202004 | 1.0 | cat1 |
202005 | 1.0 | cat1 |
202006 | 1.0 | cat1 |
202007 | 1.0 | cat1 |
202008 | 1.0 | cat1 |
202009 | 0.3333333333333333 | cat1 |
202010 | 0.375 | cat1 |
202011 | 0.4 | cat1 |
202012 | 0.8 | cat1 |
202101 | 0.8333333333333334 | cat1 |
202102 | 1.0 | cat1 |
202103 | 0.8571428571428571 | cat1 |
202104 | 0.5714285714285714 | cat1 |
202105 | 1.0 | cat1 |
202106 | 0.8333333333333334 | cat1 |
202107 | 0.6666666666666666 | cat1 |
202001 | 0.5294117647058824 | cat2 |
202002 | 0.6666666666666666 | cat2 |
202003 | 0.6842105263157895 | cat2 |
202004 | 0.4 | cat2 |
202005 | 0.7916666666666666 | cat2 |
202006 | 0.48 | cat2 |
202007 | 0.5789473684210527 | cat2 |
202008 | 0.4117647058823529 | cat2 |
202009 | 0.4666666666666667 | cat2 |
202010 | 0.5454545454545454 | cat2 |
202011 | 0.4583333333333333 | cat2 |
202012 | 0.7241379310344828 | cat2 |
202101 | 0.6111111111111112 | cat2 |
202102 | 0.5135135135135135 | cat2 |
202103 | 0.56 | cat2 |
202104 | 0.35 | cat2 |
202105 | 0.5333333333333333 | cat2 |
202106 | 0.625 | cat2 |
202107 | 0.0 | cat2 |
...
with many more categories
I now want to calculate a 12 month rolling average per categorie. The problem ive had with the pd.rolling function is that it takes data from cat1 when calculating the rolling average in cat2. And data from cat 2 in the calculation for cat 3 and so on.
Kind regards,
To calculate rolling
average per categorie
, you have to first group the dataframe on 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