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

如何合并多个无全共同列但两两有共列的DataFrame且无重复列

解决方案

要实现预期的多表合并,不能直接用pd.concat(它仅按行/列直接拼接,不处理行之间的关联匹配),需要用pd.merge分步做外连接(outer join),利用两两之间的公共列逐步关联所有表:

1. 先创建示例DataFrame(模拟你的数据)

import pandas as pd

df1 = pd.DataFrame({
    'A': ['a1', 'a2', 'a3'],
    'B': ['b1', 'b2', 'b3'],
    'C': ['c1', 'c2', 'c3']
})

df2 = pd.DataFrame({
    'B': ['b1', 'b4', pd.NA],
    'D': ['d1', 'd4', 'd5'],
    'E': ['e1', 'e4', 'e5']
})

df3 = pd.DataFrame({
    'A': ['a3', pd.NA, pd.NA],
    'D': ['d3', 'd4', 'd5'],
    'F': ['f3', 'f4', 'f5'],
    'G': ['g3', 'g4', 'g5']
})

2. 分步合并

第一步:合并df1和df2

基于公共列B做外连接,保留所有表的行:

merged_12 = pd.merge(df1, df2, on='B', how='outer')

这一步会得到包含A、B、C、D、E的中间表,已完成df1和df2的行关联。

第二步:合并中间表与df3

这里需要同时用A和D作为连接键做外连接——覆盖两种关联场景:

  • 当A列有值时(比如a3),通过A匹配;
  • 当A列无值但D列有值时(比如d4、d5),通过D匹配;

执行代码:

final_df = pd.merge(merged_12, df3, on=['A', 'D'], how='outer')

3. 最终结果

输出final_df即可得到你预期的结构:

ABCDEFG
0a1b1c1d1e1NaNNaN
1a2b2c2NaNNaNNaNNaN
2a3b3c3d3NaNf3g3
3NaNb4NaNd4e4f4g4
4NaNNaNNaNd5e5f5g5

关键说明

  • how='outer':确保所有表的行都被保留,不丢失任何数据;
  • 多键连接on=['A', 'D']:覆盖两种关联逻辑,保证df3能正确匹配到之前的合并结果;
  • 避免用pd.concat:它的核心是拼接而非关联,无法处理不同表之间的行匹配需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 04:45:32