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

如何高效快速实现3个DataFrame的Join操作并保留重复列?

多DataFrame Join并保留重复列的便捷实现方法

要实现和你给出的SQL等价的多表Join,同时保留各表的重复列(比如三个id列),用pandas可以通过链式Merge或者索引式Join高效完成,以下是具体实现:

方法一:链式Merge(直观易读)

利用pd.merge()的suffixes参数区分不同表的重复列,链式完成三次表的连接:

1. 准备示例数据

import pandas as pd

# 模拟你的三个业务表
tbl_1 = pd.DataFrame({'id': [1, 2, 3], '其他列1': ['a1', 'a2', 'a3']})
tbl_2 = pd.DataFrame({'id': [2, 3, 4], '其他列2': ['b2', 'b3', 'b4']})
tbl_3 = pd.DataFrame({'id': [2, 3, 5], '其他列3': ['c2', 'c3', 'c5']})

2. 分步合并并保留重复列

# 第一步:合并tbl_1和tbl_2,用后缀区分两个表的id列
merged_t1_t2 = pd.merge(tbl_1, tbl_2, on='id', suffixes=('_tbl1', '_tbl2'))

# 第二步:将合并结果与tbl_3合并,匹配tbl_2的id和tbl_3的id
final_merge = pd.merge(merged_t1_t2, tbl_3, left_on='id_tbl2', right_on='id', suffixes=('', '_tbl3'))

# 提取对应SQL SELECT的列(三个id列)
result = final_merge[['id_tbl1', 'id_tbl2', 'id_tbl3']]

最终result会保留三个表的id列,和SQL查询结果完全一致,且默认使用INNER JOIN(和你的SQL逻辑匹配)。

方法二:索引式Join(大数据量下更高效)

如果数据量较大,将连接键设为索引后用join()方法性能更好——索引的查找效率远高于普通列:

# 先给每个表的id列重命名,并设置为索引
tbl_1_idx = tbl_1.rename(columns={'id': 'id_tbl1'}).set_index('id_tbl1')
tbl_2_idx = tbl_2.rename(columns={'id': 'id_tbl2'}).set_index('id_tbl2')
tbl_3_idx = tbl_3.rename(columns={'id': 'id_tbl3'}).set_index('id_tbl3')

# 链式执行INNER JOIN
final_join = tbl_1_idx.join(tbl_2_idx, how='inner', on='id_tbl1').join(tbl_3_idx, how='inner', on='id_tbl2')

# 重置索引并提取目标列
result = final_join.reset_index()[['id_tbl1', 'id_tbl2', 'id_tbl3']]

关键注意点

  • 若需要其他类型的JOIN(比如LEFT JOIN),只需在merge()或join()中指定how='left'即可;
  • suffixes参数可以自定义后缀,只要能区分不同表的重复列就行;
  • 大数据量下优先用索引式Join,提前给连接键设置索引能大幅提升合并速度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 02:05:22