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

如何最优合并两个DataFrame?解决球队列批量匹配难题

批量合并球队名称不匹配的DataFrame方案

核心思路

不用逐例调整命名,而是通过统一提取队名核心标识或模糊匹配的方式,批量对齐两个DataFrame的球队名称,再完成合并。


方法1:提取核心队名实现精准匹配

适用于队名格式规律的场景(比如df2的队名是「城市+队名」,df1的队名只有核心队名):

  1. 先拆分df1中包含多支球队的行,把每个队名单独成一行:
    import pandas as pd
    
    # 假设df1是你的第一个DataFrame,包含「大都市区」「2016年预估人口」「NHL球队」列
    df1_expanded = df1.assign(NHL球队=df1['NHL球队'].str.split()).explode('NHL球队')
    
  2. 给两个DataFrame提取核心队名:
    # 从df2的「球队名称」中提取最后一个单词(NHL队名大多是后缀)
    df2['核心队名'] = df2['球队名称'].str.split().str[-1]
    # df1拆分后的队名直接作为核心队名
    df1_expanded['核心队名'] = df1_expanded['NHL球队']
    
  3. 基于核心队名列合并:
    merged_df = pd.merge(df1_expanded, df2, on='核心队名', how='left')
    
  4. 后续可按需整理:比如把同一城市的多支球队数据聚合,或保留原始字段。

方法2:模糊匹配处理复杂命名差异

如果队名格式不规律(比如存在缩写、特殊后缀),用模糊匹配批量对齐:

  1. 先安装依赖库(若未安装):
    pip install fuzzywuzzy python-Levenshtein
    
  2. 编写匹配函数,给df1的每个队名找df2中最相似的匹配项:
    from fuzzywuzzy import process
    
    def match_team(team_name, candidate_teams, threshold=80):
        # 匹配分数≥threshold才返回结果,避免错误匹配
        best_match, score = process.extractOne(team_name, candidate_teams)
        return best_match if score >= threshold else None
    
    # 给df1拆分后的每行匹配df2的球队名称
    df1_expanded['匹配球队名称'] = df1_expanded['NHL球队'].apply(
        lambda x: match_team(x, df2['球队名称'].tolist())
    )
    
  3. 基于匹配后的列合并:
    merged_df = pd.merge(df1_expanded, df2, left_on='匹配球队名称', right_on='球队名称', how='left')
    
  4. 调整threshold参数控制匹配严格度:分数越高,匹配越精准,但可能漏掉部分相似队名;分数越低,覆盖越广,但可能出现错误匹配。

补充优化建议

  • 对少量特殊队名(比如「New Jersey Devils」「Tampa Bay Lightning」这类多词队名),可以先做一个小型映射表,手动处理特殊情况后,再用上述方法批量处理常规队名。
  • 合并后要抽查结果,对匹配错误的行做手动修正,确保数据准确性。

内容的提问来源于stack exchange,提问作者Bruno Ramos Martins

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:35:11