Python中为网球赛事数据集新增两选手过往交手记录列的实现方法
解决方案
你可以直接用pandas库的内置函数实现该需求,全程无需自行编写嵌套循环,底层经过C优化,处理百万级数据也能保持很高效率。
实现逻辑
- 先将数据集按比赛日期升序排序,保证后续判断的是当前记录之前的历史交手
- 对每组对阵的两个选手姓名排序后生成唯一标识,避免「A对阵B」和「B对阵A」被识别为不同对阵
- 用
groupby+cumcount统计每个对阵的历史出现次数,即可快速判断是否已有交手记录
代码示例
import pandas as pd # 假设你已将数据集读入为DataFrame,对应字段名分别为:date(比赛日期)、player1(选手1)、player2(选手2) # 1. 日期格式转换+按时间升序排序 df['date'] = pd.to_datetime(df['date']) df = df.sort_values('date').reset_index(drop=True) # 2. 生成无顺序的对阵唯一标识 df['match_pair'] = df.apply(lambda x: tuple(sorted([x['player1'], x['player2']])), axis=1) # 3. 生成Match History字段,布尔值:True代表之前已有交手,False代表首次交手 df['Match History'] = df.groupby('match_pair').cumcount() > 0 # 可选:如果需要文本标识可替换上一步为: # df['Match History'] = df.groupby('match_pair').cumcount().apply(lambda x: '已有交手' if x>0 else '首次交手') # 可选:删除临时生成的对阵标识列 df = df.drop('match_pair', axis=1)
注意事项
- 必须保证数据集按比赛日期升序排序,否则会出现判断逻辑错误
- 提前清洗选手姓名字段,避免大小写、拼写变体、缩写差异导致同一选手被识别为不同人
内容的提问来源于stack exchange,提问作者Antho
相关产品推荐
相关产品推荐

