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

如何使用Pandas groupby方法计算不同分组对战的平均胜率交叉表

Pandas 实现两组对战胜率交叉表

完整实现代码

import pandas as pd

# 初始化原始数据集
z = pd.DataFrame({'match': [1,1,2,2,3,3,4,4],
                  'group': [0,1,1,2,0,2,1,2],
                  'win':   [0,1,1,0,0,1,0,1]})

# 按比赛分组得到每场对阵的两个组和对应胜负
match_pairs = z.groupby('match').agg(
    group1=('group', 'first'),
    win1=('win', 'first'),
    group2=('group', 'last'),
    win2=('win', 'last')
).reset_index(drop=True)

# 拼接双向对阵记录,支持两个方向的胜率统计
pair_records = pd.concat([
    match_pairs.rename(columns={'group1':'row_group', 'group2':'col_group', 'win1':'win_rate'}),
    match_pairs.rename(columns={'group2':'row_group', 'group1':'col_group', 'win2':'win_rate'})
])

# 生成交叉表,计算平均胜率,自身对阵填充为'-'
result = pair_records.pivot_table(
    index='row_group',
    columns='col_group',
    values='win_rate',
    aggfunc='mean'
).fillna('-')

print(result)

输出结果

运行上述代码后得到的结果和需求完全一致:

col_group    0    1    2
row_group               
0            -  0.0  0.0
1          1.0    -  0.5
2          1.0  0.5    -

逻辑说明

  • 第一步通过groupby+agg把每场比赛的两条记录合并为单条对阵记录,避免后续匹配冗余
  • 第二步生成双向对阵记录,满足行、列两个维度的胜率统计需求
  • 第三步通过透视表聚合计算平均胜率,空值(自身对阵)替换为-即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:09:04