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

如何合并含部分重叠列值的两个Pandas DataFrame?

Pandas DataFrame合并问题

问题描述

我需要合并两个Pandas DataFrame,尝试多种方法后仍未得到预期结果。

df1结构:

HitWellProtein
1A1alpha
2NaNbeta
3NaNgamma
1A2alpha
2NaNbeta
3NaNdelta
1A3beta
2NaNgamma

df2结构:

wellspecies
A1Dog
A2Cat
A3Bird

预期合并结果:

HitWellProteinSpecies
1A1alphaDog
2NaNbetaNaN
3NaNgammaNaN
1A2alphaCat
2NaNbetaNaN
3NaNdeltaNaN
1A3betaBird
2NaNgammaNaN

尝试过的代码:

testing = pd.concat([df1,df2], ignore_index=True, axis=0)
tesnjee = df1.combine_first(df2)
tesin2= pd.merge(df1,df2, on='well')
flame = [df1,df2]
testin3 = reduce(lambda  left,right: pd.merge(left,right,on=['well']), flame)

解决方案

核心问题有两个:一是列名大小写不匹配,二是合并类型选错了。具体修正和方案如下:

修正后的代码

# 左连接匹配,指定左右表的关联列解决大小写问题
result = pd.merge(df1, df2, left_on='Well', right_on='well', how='left')
# 删除重复的well列,让结果更贴合预期
result = result.drop('well', axis=1)
# 重命名species列,统一首字母大写格式
result = result.rename(columns={'species': 'Species'})

代码说明

  1. 列名匹配:df1的关联列是Well(首字母大写),df2是well(全小写),用left_on和right_on分别指定两边的关联列,解决大小写不匹配导致的关联失败;
  2. 左连接类型:how='left'会保留df1的所有行,df2中没有匹配到的行自动填充NaN,完全符合你的预期结果;
  3. 格式调整:drop和rename是为了让输出格式和你给出的预期完全一致,可根据实际需求选择是否保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 03:11:05