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

如何基于双ID合并两个Pandas DataFrame并匹配球员信息与赔率?

Pandas DataFrame合并解决方案:匹配球员ID与赛事信息,添加姓名和赔率

核心思路

由于result_df的player1_id可能对应betting_lines_24的winner_id或loser_id,且赛事顺序不匹配,必须通过赛事信息+球员ID的组合键进行精准匹配,不能依赖行索引。

具体实现步骤

  1. 拆分赔率表为胜者/负者子表
    把betting_lines_24拆成两个子表,分别对应赛事中的胜者和负者,并重命名列名,方便后续和result_df的player1_id对齐:

    import pandas as pd
    
    # 替换为你实际的赛事信息列名(比如'match_id')
    match_col = "赛事信息列名"
    
    # 处理胜者数据
    winner_df = betting_lines_24[[match_col, 'winner_id', 'winner_name', 'winner_odds']].rename(
        columns={
            'winner_id': 'player1_id',
            'winner_name': 'player_name',
            'winner_odds': 'player_odds'
        }
    )
    
    # 处理负者数据
    loser_df = betting_lines_24[[match_col, 'loser_id', 'loser_name', 'loser_odds']].rename(
        columns={
            'loser_id': 'player1_id',
            'loser_name': 'player_name',
            'loser_odds': 'player_odds'
        }
    )
    
  2. 合并为统一的球员-赔率映射表
    将胜者和负者子表合并,得到一个包含所有球员(无论胜负)与对应赛事、赔率、姓名的映射表:

    player_betting_map = pd.concat([winner_df, loser_df], ignore_index=True)
    
  3. 与原表合并,保留原结构
    使用merge方法,以赛事信息列+player1_id为连接键,将映射表的信息合并到result_df中:

    # 用how='left'确保保留result_df的所有原始行,未匹配到的记录会显示NaN
    final_df = pd.merge(
        result_df,
        player_betting_map,
        on=[match_col, 'player1_id'],
        how='left'
    )
    

关键注意事项

  • 确保两个DataFrame中的赛事信息列值完全一致:比如检查是否有空格、大小写差异或类型不匹配,必要时先做数据清洗(如str.strip()、astype(str))。
  • 若betting_lines_24中存在同一赛事+球员ID的重复数据,合并后会产生重复行,可提前用player_betting_map.drop_duplicates(subset=[match_col, 'player1_id'], inplace=True)去重。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 00:56:13