基于Pandas实现多列滚动统计网球选手赛前累计胜场数
网球赛事选手赛前累计胜场计算实现
需求概述
给定包含以下字段的网球赛事数据集:
p1_name: 选手1姓名p2_name: 选手2姓名p1_win: 选手1是否获胜(1=胜,0=负)p2_win: 选手2是否获胜(1=胜,0=负)
选手会在p1和p2身份间切换,需要计算每场比赛开始前,双方选手的累计胜场数。
实现方案
核心思路是用一个字典跟踪所有选手的实时胜场数,遍历每条记录时先读取当前胜场数(即赛前数据),再根据比赛结果更新字典。
Python 代码实现
import pandas as pd # 示例数据集 match_data = { 'p1_name': ['Alice', 'Bob', 'Alice', 'Charlie', 'Bob'], 'p2_name': ['Bob', 'Alice', 'Charlie', 'Alice', 'Charlie'], 'p1_win': [1, 0, 1, 0, 1], 'p2_win': [0, 1, 0, 1, 0] } df = pd.DataFrame(match_data) # 初始化选手胜场统计字典 player_win_counts = {} def get_prev_wins_and_update(row): # 获取当前比赛的两位选手 p1 = row['p1_name'] p2 = row['p2_name'] # 读取赛前累计胜场(未参赛过则为0) p1_prev = player_win_counts.get(p1, 0) p2_prev = player_win_counts.get(p2, 0) # 根据比赛结果更新胜场统计 if row['p1_win'] == 1: player_win_counts[p1] = p1_prev + 1 else: player_win_counts[p2] = p2_prev + 1 # 返回赛前胜场数 return pd.Series([p1_prev, p2_prev]) # 生成新字段并添加到原数据框 df[['p1_prev_total_wins', 'p2_prev_total_wins']] = df.apply(get_prev_wins_and_update, axis=1) # 输出结果 print(df)
运行结果
执行代码后,数据框会新增两个字段,存储每场比赛前双方的累计胜场:
p1_name p2_name p1_win p2_win p1_prev_total_wins p2_prev_total_wins 0 Alice Bob 1 0 0 0 1 Bob Alice 0 1 0 1 2 Alice Charlie 1 0 2 0 3 Charlie Alice 0 1 0 3 4 Bob Charlie 1 0 0 1
内容的提问来源于stack exchange,提问作者user19446980
相关产品推荐
相关产品推荐

