如何为DataFrame计算各队距上一场比赛的间隔天数
解决方案
要实现计算主客队距上一场比赛的间隔天数,可以按以下步骤操作:
1. 准备环境与数据
首先导入pandas并构造示例数据(已有目标DataFrame可跳过此步):
import pandas as pd 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)
2. 转换日期格式
将Date列转为datetime类型,才能进行日期差计算:
df['Date'] = pd.to_datetime(df['Date'])
3. 统一处理所有球队的比赛记录
把主队和客队的比赛数据合并为长格式,方便按球队分组计算间隔:
# 合并主客队的比赛记录 team_dates = pd.concat([ df[['team_home', 'Date']].rename(columns={'team_home': 'team'}), df[['team_away', 'Date']].rename(columns={'team_away': 'team'}) ]) # 按球队、日期排序,计算每场上一场的间隔天数 team_dates = team_dates.sort_values(['team', 'Date']) team_dates['days_since_last'] = team_dates.groupby('team')['Date'].diff().dt.days.fillna(0).astype(int)
4. 映射间隔天数回原DataFrame
创建映射字典,将每个球队对应日期的间隔天数匹配到主客队列:
# 构建(球队, 日期)到间隔天数的映射 date_diff_map = team_dates.set_index(['team', 'Date'])['days_since_last'].to_dict() # 新增home_diff和away_diff列 df['home_diff'] = df.apply(lambda row: date_diff_map[(row['team_home'], row['Date'])], axis=1) df['away_diff'] = df.apply(lambda row: date_diff_map[(row['team_away'], row['Date'])], axis=1)
最终结果
运行后得到的DataFrame与期望一致:
Date team_home team_away home_diff away_diff 0 2026-05-10 Tottenham Arsenal 0 0 1 2026-05-11 Liverpool West Ham 0 0 2 2026-05-13 West Ham Chelsea 2 0 3 2026-05-13 Arsenal Liverpool 3 2
关键逻辑说明
- 合并主客队数据:确保所有球队的所有比赛都被纳入计算,不管是主场还是客场。
- 分组计算间隔:通过
groupby('team')和diff(),自动计算每个球队每场比赛与上一场的天数差,首次比赛填充0。 - 映射回原表:利用字典快速匹配,保证每行的主客队都能获取到对应的间隔天数。
内容的提问来源于stack exchange,提问作者AjWinston
相关产品推荐
相关产品推荐

