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

R语言按球队及前7天日期范围对数据框指定列求和

同队前7天数据滚动求和实现方案

前置说明

你的需求核心是按球队分组,对每条记录统计同队在「当前日期前7天(不含当日)」的技术统计求和,注意不要误用「前7场比赛」的固定行数滚动逻辑,必须用时间窗口匹配日期范围要求,避免休赛期/赛程疏密导致的统计错误。


实现代码

import pandas as pd

# 1. 基础数据预处理
# 先将Date字段转为日期格式,再按球队、日期升序排序,保证滚动顺序正确
mlb_team_logs['Date'] = pd.to_datetime(mlb_team_logs['Date'])
mlb_team_logs = mlb_team_logs.sort_values(by=['Team', 'Date']).reset_index(drop=True)

# 2. 提取需要计算滚动和的列(第4列到最后一列,即AB及之后所有统计字段)
calc_columns = mlb_team_logs.columns[3:].tolist()

# 3. 分组时间窗口滚动计算
l7_summary = (
    mlb_team_logs
    .groupby('Team', group_keys=False)
    # 窗口为7天,closed='left'表示包含左边界(Date-7)、不包含右边界(当前Date),正好匹配[Date-7, Date-1]的区间要求
    .rolling(window='7D', on='Date', closed='left')
    [calc_columns]
    .sum()
    # 统一重命名为l7_开头的字段名
    .rename(columns=lambda col_name: f'l7_{col_name}')
)

# 4. 合并结果回原表
mlb_team_logs = pd.concat([mlb_team_logs, l7_summary], axis=1)

结果验证说明

用你提供的ARI队样本数据验证:

  • 2015-04-13当日的记录,前7天区间为2015-04-06至2015-04-12,共6场比赛
  • 这6场的AB值分别为34、31、32、35、32、36,求和为200,对应l7_AB字段值为200,和代码计算结果一致。

注意事项

  • 若某条记录对应的前7天区间内同队无任何比赛,对应l7_字段的求和结果为0,符合统计逻辑
  • 该实现基于pandas原生向量化运算,比逐行apply的写法效率高1~2个数量级,即使是全赛季大联盟数据也能秒级出结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 02:46:12