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

如何基于team1与team2匹配列计算score1的最近3场滚动平均值?

问题:按两队组合计算score1的最近3场滚动平均值

给定如下DataFrame:

team1 team2 score1 score2
0       1     2      1      0
1       3     4      3      0
2       1     3      1      1
3       2     4      0      2
4       1     2      3      2

需要新增new列,返回当team1和team2完全匹配时,score1列最近3场比赛的滚动平均值(不足3场时按现有场次计算),预期输出如下:

team1 team2 score1 score2 new
0       1     2      1      0   1
1       3     4      3      0   3
2       1     3      1      1   1
3       2     4      0      2   0
4       1     2      3      2   2

此前尝试单独按team1分组计算可实现,但扩展到team1+team2分组时结果不符合预期,且希望避免使用apply()以保证性能。


解决方案

你之前的代码存在语法错误(缺少闭合括号),修正后即可得到正确结果。推荐两种高效写法:

写法1:使用transform+lambda

df['new'] = df.groupby(['team1', 'team2'])['score1'].transform(lambda s: s.rolling(3, min_periods=1).mean())

写法2:链式调用(性能更优)

df['new'] = df.groupby(['team1', 'team2'])['score1'].rolling(3, min_periods=1).mean().reset_index(level=[0,1], drop=True)

原理说明

  • 按team1和team2的组合分组,每个组合视为独立的比赛序列
  • 对每组内的score1按数据顺序计算滚动均值,min_periods=1确保分组内不足3场时仍能计算均值
  • 两种写法均避免了apply(),性能更优,且完全匹配预期输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 20:20:29