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

如何匹配行列数据,为体育数据集新增对手平均净胜分列至DataFrame

实现代码如下

逻辑说明:先按赛季存储所有球队的平均净胜分映射,再逐行计算当前球队和各对手的交手场次,乘以对应对手的净胜分求和后除以总场次即可得到目标值,完整实现代码:

import pandas as pd

# 构造数据集,如果你是从本地文件读取,直接替换为pd.read_csv等对应读取方法即可
data = [
    [2015, 'sharks', 'shk', '0-0', '1-3', '2-0', '4-1', '3-2', 1.2],
    [2015, 'dogs', 'dgs', '3-1', '0-0', '2-1', '1-1', '2-0', 3.4],
    [2015, 'bears', 'brs', '0-2', '1-2', '0-0', '1-3', '2-1', -0.2],
    [2015, 'cats', 'cts', '1-4', '1-1', '3-1', '0-0', '2-2', 2.0],
    [2015, 'cows', 'cws', '2-3', '0-2', '1-2', '2-2', '0-0', -2.1],
    [2014, 'sharks', 'shk', '0-0', '1-3', '2-0', '4-1', '3-2', 0.7],
    [2014, 'dogs', 'dgs', '3-1', '0-0', '2-1', '1-1', '2-0', 1.8],
    [2014, 'bears', 'brs', '0-2', '1-2', '0-0', '1-3', '2-1', -1.9],
    [2014, 'cats', 'cts', '1-4', '1-1', '3-1', '0-0', '2-2', 2.3],
    [2014, 'cows', 'cws', '2-3', '0-2', '1-2', '2-2', '0-0', -3.0]
]
columns = ['season', 'team', 'tm', 'shk', 'dgs', 'brs', 'cts', 'cws', 'avg_pt_marg']
df = pd.DataFrame(data, columns=columns)

# 按赛季生成「队缩写-平均净胜分」的映射字典
season_marg_map = df.groupby('season').apply(
    lambda x: dict(zip(x['tm'], x['avg_pt_marg']))
).to_dict()
# 所有对手列的列名
opp_cols = ['shk', 'dgs', 'brs', 'cts', 'cws']

# 单行数据的计算逻辑
def calc_opp_marg(row):
    season = row['season']
    self_tm = row['tm']
    marg_map = season_marg_map[season]
    total_weighted = 0
    total_games = 0
    for opp_tm in opp_cols:
        # 跳过和自身的交手记录
        if opp_tm == self_tm:
            continue
        # 拆分比分计算总交手场次
        win, lose = map(int, row[opp_tm].split('-'))
        games = win + lose
        total_weighted += games * marg_map[opp_tm]
        total_games += games
    return total_weighted / total_games

# 生成新列
df['opponent_marg'] = df.apply(calc_opp_marg, axis=1)

# 查看结果
print(df)

运行后得到的df就包含你需要的opponent_marg列,其中2015年sharks的计算结果和你给出的示例完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:45:00