You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何计算足球数据的年度及生涯场均滚动平均值

足球赛事数据场均指标计算实现思路

前置准备:数据排序

所有时间维度的窗口计算核心前提是保证数据按比赛先后顺序排列,先执行排序操作,让每个球员的记录按职业生涯比赛顺序排列:

df = df.sort_values(by=['Player', '年份', '周次']).reset_index(drop=True)

排序完成后分组内的行顺序天然匹配比赛先后顺序,不需要为rolling自定义时间窗口,直接基于行顺序计算即可。


场景1:累计场均计算(截止到当前周的总场均)

如果要计算的是生涯/年度截止到当前周的所有比赛场均值,使用pandas的expanding累计窗口实现即可,代码如下:

# 配置指标映射关系,可按需扩展
metric_map = {
    '冲球码数': ['生涯场均冲球码数', '年度场均冲球码数'],
    '接球数': ['生涯场均接球数', '年度场均接球数']
}

for origin_col, (career_col, annual_col) in metric_map.items():
    # 计算生涯累计场均:按球员分组,累计从首秀到当前场的指标平均值
    df[career_col] = df.groupby('Player')[origin_col].expanding(min_periods=1).mean().reset_index(drop=True)
    # 计算年度累计场均:按球员+年份分组,累计当年首周到当前周的指标平均值
    df[annual_col] = df.groupby(['Player', '年份'])[origin_col].expanding(min_periods=1).mean().reset_index(drop=True)

上述逻辑直接在原数据集上新增字段,不需要额外做关联合并操作。


场景2:近N场滚动场均计算

如果你需要的是最近N场比赛的滚动平均值而非累计场均,把上述代码中的expanding替换为rolling(N)即可:

N = 3 # 可按需调整窗口大小
for origin_col, (career_col, annual_col) in metric_map.items():
    # 生涯近N场场均
    df[career_col] = df.groupby('Player')[origin_col].rolling(N, min_periods=0).mean().reset_index(drop=True)
    # 年度近N场场均
    df[annual_col] = df.groupby(['Player', '年份'])[origin_col].rolling(N, min_periods=0).mean().reset_index(drop=True)

特殊场景说明:如果原始数据中存在同一球员同一周有多条比赛记录的情况,需要先按Player、年份、周次分组聚合单周的总冲球码数、总接球数,再执行上述场均计算逻辑,避免周内重复统计。

内容的提问来源于stack exchange,提问作者kh7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 23:06:05