Python 分组滚动平均值计算:求EPL主队单赛季近5场主场得分均值
解决方案
你可以直接用pandas原生的groupby+rolling向量化方法实现,完全不需要手写循环,对万级别的数据量可以毫秒级出结果,实现代码如下:
# 计算每支主队单赛季内当前比赛前5场主场平均得分 results['HomeLast5'] = results.groupby(['HomeTeam', 'Season'])['HPts']\ .rolling(window=5, min_periods=1)\ .mean()\ .groupby(['HomeTeam', 'Season'])\ .shift(1)\ .reset_index(drop=True, level=[0,1])
逻辑说明
- 外层
groupby(['HomeTeam', 'Season'])保证所有计算都限定在「同一球队、同一赛季」的范围内,不会跨赛季、跨球队取数 rolling(window=5)指定滚动窗口大小为5场:如果希望不足5场时返回空值,直接保留默认参数即可;如果希望不足5场时按实际已有场数计算平均,保留代码中的min_periods=1参数即可shift(1)将滚动计算结果整体后移1位,排除当前行的得分,刚好取到当前比赛之前的最多5场数据- 末尾的
reset_index用于对齐groupby产生的多级索引,保证计算结果可以正确匹配原DataFrame的每一行
注意事项
你提到数据已经按时间顺序排列,所以不需要额外排序,如果后续数据顺序发生变化,需要先按赛事时间字段排序后再执行上述代码,否则计算的最近5场顺序会出错。
内容的提问来源于stack exchange,提问作者hawkaterrier
相关产品推荐
相关产品推荐

