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

如何根据胜负反转Pandas中网球比赛的盘比分顺序

解决网球数据集败者比分反转问题

完整实现代码

import pandas as pd

player_name = ['Novak Djokovic','Rafael Nadal','Roger Federer','Andy Murray']
match_id = [202, 202, 203, 203]
score = ['6-3 5-7 6-4', '6-3 5-7 6-4', '6-4 7-6', '6-4 7-6']
outcome = [1,0,1,0]

df = pd.DataFrame(
    {'player_name': player_name,
        'match_id': match_id,
         'score': score,
         'outcome':outcome
    })

df["sets"]= df["score"].str.split(" ", n = 3, expand = False)
df['set1_score'] = df['sets'].str[0]
df['set2_score'] = df['sets'].str[1]
df['set3_score'] = df['sets'].str[2]

# 定义反转单局比分的函数
def reverse_set_score(score):
    if pd.notna(score):
        # 按'-'分割比分,反转后重新拼接
        return '-'.join(reversed(score.split('-', 1)))
    return score

# 筛选出败者(outcome=0)的行,对对应列应用反转函数
loser_mask = df['outcome'] == 0
df.loc[loser_mask, ['set1_score', 'set2_score', 'set3_score']] = df.loc[loser_mask, ['set1_score', 'set2_score', 'set3_score']].applymap(reverse_set_score)

# 查看结果
print(df)

步骤说明

  1. 定义反转函数:reverse_set_score处理单局比分,非空值时将X-Y格式的比分反转成Y-X,空值(比如无第三局的情况)直接返回原空值,避免报错。
  2. 筛选败者行:用布尔掩码loser_mask定位所有outcome=0的败者记录。
  3. 批量反转比分:通过df.loc选中败者的set1到set3列,用applymap对每个单元格应用反转函数,直接替换原数据,胜者的比分保持不变。

运行后得到的结果完全符合你给出的期望DataFrame。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 05:25:33