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

如何基于a类与命名不同的b类列合并多个Pandas DataFrame

解决方法

方法一:优化reduce合并逻辑

你完全可以用reduce实现需求,只需要在合并时明确以a列为键,由于除a外其他列名都是唯一的,不需要额外设置后缀。修改后的代码如下:

import pandas as pd
from functools import reduce

# 创建示例DataFrame
df1 = pd.DataFrame({'a': [1, 2, 3], 'b1': [4, 5, 6], 'c1': [7, 8, 9]})
df2 = pd.DataFrame({'a': [1, 2, 3], 'b2': [4, 5, 6], 'c2': [13, 14, 15]})
df3 = pd.DataFrame({'a': [1, 2, 3], 'b3': [4, 5, 9], 'c3': [19, 20, 21]})
df4 = pd.DataFrame({'a': [1, 2, 3], 'b4': [1, 5, 6], 'c4': [25, 26, 27]})

dfs = [df1, df2, df3, df4]

# 基于a列依次合并所有DataFrame
merged_df = reduce(lambda left, right: pd.merge(left, right, on='a'), dfs)

# 查看结果
print(merged_df)

运行后会得到你想要的结构:仅保留一次a列,所有b*、c*列全部保留。

方法二:concat结合索引合并(更高效)

如果处理40个DataFrame,这种方法性能更优:

  1. 先将每个DataFrame的a列设为索引
  2. 横向拼接所有DataFrame
  3. 最后重置索引恢复a列为普通列

代码示例:

import pandas as pd

# 创建示例DataFrame
df1 = pd.DataFrame({'a': [1, 2, 3], 'b1': [4, 5, 6], 'c1': [7, 8, 9]})
df2 = pd.DataFrame({'a': [1, 2, 3], 'b2': [4, 5, 6], 'c2': [13, 14, 15]})
df3 = pd.DataFrame({'a': [1, 2, 3], 'b3': [4, 5, 9], 'c3': [19, 20, 21]})
df4 = pd.DataFrame({'a': [1, 2, 3], 'b4': [1, 5, 6], 'c4': [25, 26, 27]})

dfs = [df1, df2, df3, df4]

# 每个df设置a为索引后拼接
merged_df = pd.concat([df.set_index('a') for df in dfs], axis=1).reset_index()

# 查看结果
print(merged_df)

结果验证

两种方法得到的结果均符合预期,比如提取a=2的行:

a  b1  c1  b2  c2  b3  c3  b4  c4
1  2   5   8   5  14   5  20   5  26

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 06:52:35