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

基于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:15:27