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

Python实现DataFrame新增列展示篮球比赛对应球队的对手名称

Pandas实现按比赛场次匹配对手列的方案

核心前提:每场GameID对应的赛事固定有且仅有2支参赛球队,符合篮球比赛的业务场景。

方案1:简洁写法(适合中小数据集)

通过groupby+transform直接按场次分组计算对手,代码如下:

import pandas as pd

# 核心逻辑:按GameID分组后对每行TeamID匹配同场另一支球队
games['Opponents'] = games.groupby('GameID')['TeamID'].transform(
    lambda group: group.map(lambda team: [t for t in group.unique() if t != team][0])
)

逻辑说明:

  • 按GameID拆分每场比赛的所有行
  • 对每场比赛先提取参赛的2支球队唯一值
  • 逐行匹配:过滤掉当前行的球队,剩下的唯一值就是对手

方案2:高性能写法(适合百万级以上大数据集)

提前构造对阵映射字典,避免分组内重复计算,性能提升明显:

# 1. 预构造每场的(赛事ID, 球队)到对手的映射关系
opponent_mapping = {}
for game_id, game_df in games.groupby('GameID'):
    two_teams = game_df['TeamID'].unique()
    opponent_mapping[(game_id, two_teams[0])] = two_teams[1]
    opponent_mapping[(game_id, two_teams[1])] = two_teams[0]

# 2. 批量映射得到对手列
games['Opponents'] = games.apply(lambda x: opponent_mapping[(x['GameID'], x['TeamID'])], axis=1)

运行以上任意一种方案,都能得到你期望的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:36:03