在DataFrame中新增列查询各主客队上一周的对阵球队
实现方案(基于Python Pandas)
核心思路是先整理出所有球队每一周的对阵对手映射关系,再关联回原表得到对应球队上周的对手信息,具体步骤如下:
- 第一步:拆分原表的每场比赛,生成「赛季-周-球队-当前周对手」的映射长表
- 第二步:调整映射表的匹配字段,把周数+1,用来对应原表中「当前周」和「上周」的关系
- 第三步:分别将主队、客队的上周对手关联到原表,生成两个新字段
import pandas as pd # 1、生成球队每周对手的映射表 team_week_opponent = pd.concat([ # 提取主队对阵记录:球队为home_team,对手为away_team df[['season', 'week', 'home_team', 'away_team']].rename(columns={'home_team':'team', 'away_team':'current_opponent'}), # 提取客队对阵记录:球队为away_team,对手为home_team df[['season', 'week', 'away_team', 'home_team']].rename(columns={'away_team':'team', 'home_team':'current_opponent'}) ]) # 2、调整映射表的匹配字段,用于关联上周数据 team_week_opponent['match_week'] = team_week_opponent['week'] + 1 team_week_opponent = team_week_opponent.rename(columns={'current_opponent':'last_week_opponent'}) # 3、关联主队上周对手到原表 df = df.merge( team_week_opponent, left_on=['season', 'week', 'home_team'], right_on=['season', 'match_week', 'team'], how='left' ).rename(columns={'last_week_opponent':'home_last_week_opponent'}).drop(columns=['team', 'match_week']) # 4、关联客队上周对手到原表 df = df.merge( team_week_opponent, left_on=['season', 'week', 'away_team'], right_on=['season', 'match_week', 'team'], how='left' ).rename(columns={'last_week_opponent':'away_last_week_opponent'}).drop(columns=['team', 'match_week'])
补充说明:赛季第1周的球队没有上周对阵记录,对应新列会返回
NaN,属于正常逻辑;关联时自带season字段作为匹配条件,不会出现跨赛季匹配的问题。
内容的提问来源于stack exchange,提问作者Drew
相关产品推荐
相关产品推荐

