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

基于两个Pandas DataFrame计算对手平均数据并生成预期值新列

解决方案

实现逻辑:先将赛程表转为长表结构匹配对手数据,分组求平均值后合并回原数据表即可,该方法可自动适配任意数量的对手列,无需随赛季周数调整代码。

import pandas as pd

# 初始数据
data = {'Name':['Edgar', 'Ralph', 'Marc', 'David'],
        'STAT1':[100, 96, 110, 103],
       'STAT2':[116, 93, 85, 100],
       'STAT3':[56, 59, 41, 83],
       'STAT4':[55, 96, 113, 40],}

data2 = {'Name':['Edgar', 'Ralph', 'Marc', 'David'],
        'Opp1':['Ralph', 'Edgar', 'David', 'Marc'],
       'Opp2':['Ralph', 'Edgar', 'David', 'Marc'],
       'Opp3':['Marc', 'David', 'Edgar', 'Ralph'],
       'Opp4':['David', 'Marc', 'Ralph', 'Edgar'],
        'Opp5':['Ralph', 'Edgar', 'David', 'Marc'],}

df = pd.DataFrame(data)
df_Schedule = pd.DataFrame(data2)

# 核心处理逻辑
## 1. 把宽格式赛程转为长格式,每行对应一场对阵的运动员和对手
sched_long = df_Schedule.melt(id_vars='Name', value_name='Opponent').drop('variable', axis=1)
## 2. 匹配每个对手的STAT数据
opp_stat_matched = sched_long.merge(df, left_on='Opponent', right_on='Name', suffixes=('', '_opp'))
## 3. 按运动员分组计算各STAT的平均值,重命名为EXP开头的列
exp_df = opp_stat_matched.groupby('Name', as_index=False)[['STAT1', 'STAT2', 'STAT3', 'STAT4']].mean().rename(columns=lambda col: f"EXP{col[-1]}")
## 4. 合并回原数据表得到最终结果
df_final = df.merge(exp_df, on='Name')

print(df_final)

运行输出与预期完全一致:

Name  STAT1  STAT2  STAT3  STAT4   EXP1   EXP2  EXP3  EXP4
0  Edgar    100    116     56     55  100.2   92.8  60.2  88.2
1  Ralph     96     93     59     96  102.6  106.6  58.4  63.6
2   Marc    110     85     41    113  101.0  101.8  72.8  54.2
3  David    103    100     83     40  105.2   92.8  47.6  98.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:45:04