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

基于pandas实现DataFrame按key列合并的方法咨询

解决DataFrame全外连接合并问题

先还原你的两个示例DataFrame:

import pandas as pd

# 第一个DataFrame
df1 = pd.DataFrame({
    'key': ['abc', 'bcd'],
    'Apple': [1, 23],
    'Banana': [12, 21]
})

# 第二个DataFrame
df2 = pd.DataFrame({
    'key': ['abc', 'jkn'],
    'Train': [11, 2],
    'Car': [20, 19]
})

你用pd.concat没得到预期结果,是因为它是按行/轴直接拼接,不会根据key列做匹配对齐。要实现保留所有key、缺失字段按需填充的需求,应该用pd.merge做全外连接,以下是具体实现:

方法1:保留缺失值(NA)

直接调用merge并指定how='outer',会保留两个DataFrame中所有的key值,不匹配的字段自动填充为NaN:

merged_df = pd.merge(df1, df2, on='key', how='outer')

输出结果:

keyAppleBananaTrainCar
abc1.012.011.020.0
bcd23.021.0NaNNaN
jknNaNNaN2.019.0

方法2:缺失值填充为0

如果需要把NaN替换成0,在merge后调用fillna(0)即可:

merged_df_with_0 = pd.merge(df1, df2, on='key', how='outer').fillna(0)

输出结果:

keyAppleBananaTrainCar
abc1121120
bcd232100
jkn00219

为什么pd.concat不适用?

举个例子,若用pd.concat([df1, df2], axis=1),会按索引拼接,导致bcd和jkn的字段错位;若用axis=0则是行堆叠,key会重复,完全达不到按key匹配合并的效果。这种按指定键做全量匹配的场景,merge才是正确选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 23:36:20