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

基于目标值在Pandas DataFrame中计算网球选手交手记录问题排查

解决网球比赛交手记录统计错误问题

问题核心

你的代码错误出在没有统一选手配对的统计逻辑——当比赛中Player1失利(target=0)时,没有正确对应到Player2的胜场,且后续比赛如果选手顺序调换,会因为配对键不统一导致统计混乱。

解决方案

通过统一选手配对的唯一键,确保同一对选手的交手记录始终存在同一个条目下,再按比赛顺序正确更新胜场数:

  1. 初始化一个字典存储所有选手对的交手记录,键为排序后的选手名字元组(比如('Federer', 'Nadal'),不管谁在比赛中是Player1还是Player2,键都一致)。
  2. 按比赛时间顺序遍历每行数据,先读取当前比赛前的历史交手记录,赋值到player1_h2h和player2_h2h。
  3. 根据比赛结果(target值),正确累加获胜选手的胜场数到字典中。

修正后的代码

# 初始化交手记录字典
h2h_records = {}

# 新增h2h列并初始化
tennis_data_processed['player1_h2h'] = 0
tennis_data_processed['player2_h2h'] = 0

# 确保数据按比赛日期升序排列(必须步骤!)
tennis_data_processed = tennis_data_processed.sort_values('比赛日期列名').reset_index(drop=True)

# 遍历每一场比赛
for idx, row in tennis_data_processed.iterrows():
    p1 = row['Player1']
    p2 = row['Player2']
    target = row['target']
    
    # 生成排序后的选手配对键,保证同一对选手键唯一
    sorted_pair = tuple(sorted([p1, p2]))
    
    # 初始化该配对的记录(如果不存在)
    if sorted_pair not in h2h_records:
        h2h_records[sorted_pair] = [0, 0]  # [排序第一个选手胜场, 排序第二个选手胜场]
    
    # 确定当前选手在排序对中的位置,获取历史胜场数
    if p1 == sorted_pair[0]:
        p1_hist_wins = h2h_records[sorted_pair][0]
        p2_hist_wins = h2h_records[sorted_pair][1]
    else:
        p1_hist_wins = h2h_records[sorted_pair][1]
        p2_hist_wins = h2h_records[sorted_pair][0]
    
    # 写入当前比赛前的交手记录
    tennis_data_processed.at[idx, 'player1_h2h'] = p1_hist_wins
    tennis_data_processed.at[idx, 'player2_h2h'] = p2_hist_wins
    
    # 根据比赛结果更新交手记录
    if target == 1:
        # Player1获胜,对应他在排序对中的位置胜场+1
        if p1 == sorted_pair[0]:
            h2h_records[sorted_pair][0] += 1
        else:
            h2h_records[sorted_pair][1] += 1
    else:
        # Player2获胜,对应他在排序对中的位置胜场+1
        if p2 == sorted_pair[0]:
            h2h_records[sorted_pair][0] += 1
        else:
            h2h_records[sorted_pair][1] += 1

关键说明

  • 必须确保DataFrame按比赛日期升序排列,否则统计的历史记录会包含未发生的比赛,导致结果错误。
  • 排序后的配对键彻底解决了选手顺序调换导致的记录分散问题,不管哪场比赛谁在前,同一对选手的交手数据都存在同一个键下。
  • 先读取历史记录再更新,保证player1_h2h和player2_h2h存储的是当前比赛之前的交手胜场数,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 09:52:52