我有一个数据框(results
)的英超结果从过去的28年,我试图计算平均主队积分(HPts
)从他们的前5个主场比赛在本赛季。行已经按时间顺序排列。我正在有效地寻找的是下面的启动代码的一个版本,该版本通过HomeTeam
和Season
进行分区,并使用匹配HomeTeam
和Season
的前5行窗口计算HPts
的平均值。显然,现有的代码写不做我需要的(它看起来只有最后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()
谁知道我如何添加一个新的列与滚动平均积分为一个给定的球队和赛季?我也许可以用循环来解决这个问题,但我肯定这不是解决这个问题的最有效的方法。
将数据帧按HomeTeam
和Season
分组,然后计算在HPts
上滚动mean
。然后,为了将计算的平均值赋给原始数据帧,从索引中删除级别0, 1
,以便索引对齐能够正常工作。
g = results.groupby(['HomeTeam', 'Season'])['HPts']
results['HomeLast5'] = g.rolling(5).mean().droplevel([0, 1])