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

Python中如何选择性合并两个DataFrame?

解决方案:用左连接保留所有对战记录

你丢行的核心原因是默认的merge用的是内连接(inner join),只有两边DataFrame完全匹配的行才会保留。如果DF2里的某些对战记录(比如某队某年份)在DF1里没有对应数据,这些行就会被直接过滤掉。

改用**左连接(left join)**就能保留DF2的所有行,DF1里匹配不上的统计数据会用NaN填充,不会丢行。同时可以通过后缀参数区分两支球队的统计列,避免列名重复。

优化后的代码

# 第一次合并:关联Team1的年度统计数据,保留DF2所有行,给Team1的统计列加后缀
DF3 = DF2.merge(
    DF1,
    left_on=['Year', 'Team 1'],
    right_on=['Year', 'Team'],
    how='left',
    suffixes=('', '_team1')
)
# 删除重复的Team列(来自DF1的Team字段)
DF3.drop('Team', axis=1, inplace=True)

# 第二次合并:关联Team2的年度统计数据,同样保留所有行,给Team2的统计列加后缀
DF3 = DF3.merge(
    DF1,
    left_on=['Year', 'Team 2'],
    right_on=['Year', 'Team'],
    how='left',
    suffixes=('', '_team2')
)
# 删除重复的Team列
DF3.drop('Team', axis=1, inplace=True)

额外排查点

如果用左连接后还是有数据缺失,大概率是球队名称或年份的格式不匹配:

  • 检查球队名称是否有大小写差异(比如"Team A" vs "team a")
  • 检查年份是否有格式问题(比如字符串类型的"2023" vs 数值类型的2023)
  • 可以先对DF1和DF2的Year和球队列做标准化处理,比如统一转成大写、去除空格等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 09:05:14