如何在DataFrame中计算并添加主、客队距上一场比赛的间隔天数列
计算主客队距上一场比赛的间隔天数
我来帮你解决这个问题!要实现给DataFrame新增home_diff和away_diff列的需求,我们可以通过以下步骤用Pandas完成:
步骤1:准备数据并转换日期格式
首先我们先构造你提供的示例数据,并把Date列转换为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) df['Date'] = pd.to_datetime(df['Date']) # 转换为datetime格式
步骤2:收集所有球队的比赛记录
我们需要把每个球队的所有比赛(不管主场还是客场)都整理到一起,这样才能计算每一场和上一场的间隔:
# 合并主客队的比赛记录 all_games = pd.concat([ df[['Date', 'team_home']].rename(columns={'team_home': 'team'}), df[['Date', 'team_away']].rename(columns={'team_away': 'team'}) ])
步骤3:计算每个球队每场比赛的间隔天数
按球队分组,对日期排序后,用diff()计算当前比赛和上一场的天数差,首次比赛的间隔设为0:
# 按球队和日期排序 all_games_sorted = all_games.sort_values(['team', 'Date']) # 计算间隔天数,首次比赛填充0 all_games_sorted['days_since_last'] = all_games_sorted.groupby('team')['Date'].diff().dt.days.fillna(0)
步骤4:将间隔天数匹配回原DataFrame
我们可以用merge的方式高效地把计算好的间隔天数对应到原表的主客队列中:
# 分别为主队和客队的匹配结果重命名列 home_merge = all_games_sorted.rename(columns={'team': 'team_home', 'days_since_last': 'home_diff'}) away_merge = all_games_sorted.rename(columns={'team': 'team_away', 'days_since_last': 'away_diff'}) # 合并回原DataFrame df = df.merge(home_merge, on=['Date', 'team_home'], how='left') df = df.merge(away_merge, on=['Date', 'team_away'], how='left')
最终结果
运行完上述代码后,你就能得到期望的DataFrame:
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
这个逻辑的核心是先统一收集所有球队的比赛记录,计算出每个球队每场的间隔后,再匹配回原表,这样就能准确对应主客队各自的上一场比赛间隔啦!
内容的提问来源于stack exchange,提问作者AjWinston
相关产品推荐
相关产品推荐

