如何根据胜负反转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)
步骤说明
- 定义反转函数:
reverse_set_score处理单局比分,非空值时将X-Y格式的比分反转成Y-X,空值(比如无第三局的情况)直接返回原空值,避免报错。 - 筛选败者行:用布尔掩码
loser_mask定位所有outcome=0的败者记录。 - 批量反转比分:通过
df.loc选中败者的set1到set3列,用applymap对每个单元格应用反转函数,直接替换原数据,胜者的比分保持不变。
运行后得到的结果完全符合你给出的期望DataFrame。
内容的提问来源于stack exchange,提问作者user2813606
相关产品推荐
相关产品推荐

