You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在DataFrame中计算并添加主客队距各自上一场比赛的天数差列

解决方法:计算球队距上一场比赛的间隔天数

这个需求在体育赛事数据分析里挺常见的,我来给你提供一个清晰的Pandas实现方案,完全符合你想要的结果:

步骤说明

核心思路是先统一整理所有球队的比赛记录(不管主客场),计算每支球队相邻比赛的间隔天数,再把结果映射回原始DataFrame中。

1. 准备数据并转换日期类型

首先要确保日期列是datetime格式,否则无法进行时间差计算:

import pandas as pd

# 构建你的示例DataFrame
data = {
    'Date': ['2026-05-10', '2026-05-11', '2026-05-13', '2026-05-13'],
    'team_home': ['Tottenham', 'Liverpool', 'West Ham', 'Arsenal'],
    'team_away': ['Arsenal', 'West Ham', 'Chelsea', 'Liverpool']
}
df = pd.DataFrame(data)

# 转换Date列为datetime类型(关键步骤)
df['Date'] = pd.to_datetime(df['Date'])

2. 整理所有球队的比赛记录

把主队和客队的比赛记录合并,形成"球队-比赛日期"的统一结构:

# 提取主队比赛记录
home_games = df[['team_home', 'Date']].rename(columns={'team_home': 'team', 'Date': 'game_date'})
# 提取客队比赛记录
away_games = df[['team_away', 'Date']].rename(columns={'team_away': 'team', 'Date': 'game_date'})
# 合并所有比赛记录并按球队、日期排序
all_games = pd.concat([home_games, away_games]).sort_values(['team', 'game_date'])

3. 计算每支球队的比赛间隔天数

对每支球队的比赛日期分组,计算相邻比赛的间隔天数,首次比赛的间隔设为0:

# 计算间隔天数,首次比赛填充0
all_games['days_since_last'] = all_games.groupby('team')['game_date'].diff().dt.days.fillna(0)

4. 将间隔天数映射回原始DataFrame

merge方法(比apply效率更高)把计算好的间隔值匹配到主队和客队对应的列:

# 匹配主队的间隔天数
home_merge = df.merge(all_games, left_on=['team_home', 'Date'], right_on=['team', 'game_date'], how='left')
df['home_diff'] = home_merge['days_since_last']

# 匹配客队的间隔天数
away_merge = df.merge(all_games, left_on=['team_away', 'Date'], right_on=['team', 'game_date'], how='left')
df['away_diff'] = away_merge['days_since_last']

验证结果

运行上述代码后,打印df会得到你期望的结果:

Date team_home team_away  home_diff  away_diff
0 2026-05-10  Tottenham    Arsenal        0.0        0.0
1 2026-05-11  Liverpool  West Ham        0.0        0.0
2 2026-05-13  West Ham    Chelsea        2.0        0.0
3 2026-05-13    Arsenal  Liverpool        3.0        2.0

关键细节说明

  • 为什么要合并主客场记录?因为一支球队的比赛可能是主场也可能是客场,统一处理才能准确计算所有比赛的间隔。
  • merge代替apply:当你的DataFrame数据量很大时,merge的运行效率会远高于apply,避免性能瓶颈。
  • 日期转换的重要性:如果Date列是字符串类型,diff()方法无法计算时间差,必须先转换为datetime格式。

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

火山引擎 最新活动