带过滤器的滚动平均值 - Python

Rolling average with filters - Python

我有过去 28 年 EPL 结果的数据框 (results),我正在尝试计算他们之前 5 场主场比赛的平均主队得分 (HPts)当前季节。这些行已经按时间顺序排列。我正在有效寻找的是下面的起始代码版本,它按 HomeTeamSeason 进行分区,并使用前 5 行的 window 计算 HPts 的平均值匹配 HomeTeamSeason。很明显,现有的代码并不能满足我的需要(不管球队和赛季如何,它只看最后 5 行),但只是为了展示我的意思作为起点。

             HomeTeam        AwayTeam Season Result  HPts  APts
0             Arsenal        Coventry   1993      A     0     3
1         Aston Villa             QPR   1993      H     3     0
2             Chelsea       Blackburn   1993      A     0     3
3           Liverpool  Sheffield Weds   1993      H     3     0
4            Man City           Leeds   1993      D     1     1
..                ...             ...    ...    ...   ...   ...
375         Liverpool  Crystal Palace   2020      H     3     0
376          Man City         Everton   2020      H     3     0
377  Sheffield United         Burnley   2020      H     3     0
378          West Ham     Southampton   2020      H     3     0
379            Wolves      Man United   2020      A     0     3

[10804 rows x 6 columns]

# Starting point for my code for home team avg points from last 5 home games
results['HomeLast5'] = results['HPts'].rolling(5).mean()

任何人都知道如何添加一个新列,其中包含给定球队和赛季的滚动平均分?我可能会想出一种通过循环来执行此操作的方法,但我确信这不是解决此问题的最有效方法。

HomeTeamSeason 对数据帧进行分组,然后在 HPts 上计算滚动 mean。然后,为了将计算出的平均值分配回原始数据帧,从索引中删除级别 0, 1,以便索引对齐正常工作。

g = results.groupby(['HomeTeam', 'Season'])['HPts']
results['HomeLast5'] = g.rolling(5).mean().droplevel([0, 1])