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

如何将多个DataFrame合并为带有多级索引列的DataFrame

合并多个DataFrame为带多级列索引的结果

已知所有DataFrame的foo列值及顺序完全一致,以下是实现目标的具体方法:

基础示例(2个DataFrame)

首先准备测试数据:

import pandas as pd

df1 = pd.DataFrame([['a', 2], ['b', 4]], columns=['foo', 'bar'])
df2 = pd.DataFrame([['a', 3], ['b', 5]], columns=['foo', 'bar'])

方法一:分步设置多级列索引后合并

  1. 给第一个DataFrame的所有列添加外层层级名称(如df1)
  2. 给后续DataFrame仅保留bar列(因为foo列完全重复),并添加对应外层层级名称
  3. 横向合并处理后的DataFrame

代码实现:

# 为df1设置多级列索引
df1_multi = df1.set_axis(pd.MultiIndex.from_tuples([('df1', col) for col in df1.columns]), axis=1)
# 为df2的bar列设置多级列索引
df2_multi = df2[['bar']].set_axis(pd.MultiIndex.from_tuples([('df2', 'bar')]), axis=1)
# 合并得到结果
result = pd.concat([df1_multi, df2_multi], axis=1)

运行后得到的结果与预期完全一致:

df1     df2
        foo bar bar
0       a   2   3
1       b   4   5

通用方案(N个DataFrame)

如果有多个DataFrame,可以用字典存储名称与对应DataFrame,批量处理:

# 存储所有DataFrame,键为名称,值为DataFrame对象
dfs_dict = {'df1': df1, 'df2': df2, 'df3': pd.DataFrame([['a',6], ['b',7]], columns=['foo','bar'])}

# 初始化结果:取第一个DataFrame的所有列并设置多级索引
first_name, first_df = next(iter(dfs_dict.items()))
result = first_df.set_axis(pd.MultiIndex.from_tuples([(first_name, col) for col in first_df.columns]), axis=1)

# 遍历剩余DataFrame,仅合并非foo列
for name, df in dfs_dict.items():
    if name == first_name:
        continue
    # 过滤掉重复的foo列,设置多级索引后合并
    df_filtered = df.drop(columns=['foo'])
    df_filtered_multi = df_filtered.set_axis(pd.MultiIndex.from_tuples([(name, col) for col in df_filtered.columns]), axis=1)
    result = pd.concat([result, df_filtered_multi], axis=1)

另一种简洁写法

利用索引对齐特性,先将foo设为索引合并,再还原为列并调整层级:

# 将所有DataFrame的foo设为索引
indexed_dfs = [df.set_index('foo') for df in [df1, df2]]
# 用concat的keys参数设置外层列层级
temp_result = pd.concat(indexed_dfs, axis=1, keys=['df1', 'df2'])
# 还原foo为列,并调整列层级结构
result = temp_result.reset_index()
result.columns = pd.MultiIndex.from_tuples([('df1', 'foo')] + list(result.columns[1:]))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 19:09:30