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

如何基于MLB列的部分匹配合并两个Pandas DataFrame?

解决方案

先还原示例中的两个DataFrame:

import pandas as pd

df_1 = pd.DataFrame({
    'Cities': ['New York City', 'Los Angeles', 'San Francisco'],
    'Population': [20153634, 13310447, 6657982],
    'MLB': ['Yankees Mets', 'Dodgers Angels', 'Giants Athletics']
})

df_2 = pd.DataFrame({
    'MLB': ['Red Sox', 'Yankees', 'Rays', 'Blue'],
    'W': [108.0, 100.0, 90.0, 73.0],
    'L': [54.0, 62.0, 72.0, 89.0]
})

实现步骤

  1. 拆分左表MLB列到多行
    把df_1中每个城市的MLB队名拆分成单独行,保留城市和人口信息:
# 拆分MLB列并展开为多行
df_1_expanded = df_1.assign(MLB=df_1['MLB'].str.split()).explode('MLB').reset_index(drop=True)
  1. 与右表匹配合并
    用merge方法匹配拆分后的队名,保留左表所有行(即使右表无对应数据):
merged = df_1_expanded.merge(df_2, on='MLB', how='left')
  1. 分组拼接W/L信息
    按原城市和人口分组,把每个队的W/L数据格式化为字符串,没有匹配到的队可标注无数据:
# 定义拼接函数:格式化W/L为"队名(W-L)",无匹配则显示"队名(无数据)"
def format_wl(group):
    wl_strs = []
    for _, row in group.iterrows():
        if pd.notna(row['W']) and pd.notna(row['L']):
            wl_str = f"{row['MLB']}({row['W']}-{row['L']})"
        else:
            wl_str = f"{row['MLB']}(无数据)"
        wl_strs.append(wl_str)
    return ', '.join(wl_strs)

# 分组应用函数并合并原MLB列
final_df = merged.groupby(['Cities', 'Population']).apply(format_wl).reset_index(name='MLB_WL')
final_df = final_df.merge(df_1[['Cities', 'MLB']], on='Cities')
# 调整列顺序
final_df = final_df[['Cities', 'Population', 'MLB', 'MLB_WL']]

最终结果

运行后得到的final_df如下:

Cities  Population               MLB                          MLB_WL
0  New York City    20153634      Yankees Mets  Yankees(100.0-62.0), Mets(无数据)
1    Los Angeles    13310447   Dodgers Angels  Dodgers(无数据), Angels(无数据)
2  San Francisco     6657982  Giants Athletics  Giants(无数据), Athletics(无数据)

如果只想保留匹配到的队信息,可修改format_wl函数,只收集有数据的条目:

def format_wl(group):
    wl_strs = []
    for _, row in group.iterrows():
        if pd.notna(row['W']) and pd.notna(row['L']):
            wl_str = f"{row['MLB']}({row['W']}-{row['L']})"
            wl_strs.append(wl_str)
    return ', '.join(wl_strs) if wl_strs else '无匹配数据'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 17:33:13