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

如何将同维度、同列名索引名的两个DataFrame合并为含子列的3D新DataFrame

合并同维度DataFrame为带多级列的模拟3D结构

Pandas 没有原生的3D DataFrame,但可以通过**多级列(MultiIndex Columns)**的2D DataFrame实现你需要的效果——让原DataFrame的每一列对应两个子列,分别存储A和B的数据。

方法1:用pd.concat快速合并并调整层级

先构造示例数据(可替换为你自己的DataFrame):

import pandas as pd
import numpy as np

# 生成同维度、同列名/索引的示例DataFrame A和B
np.random.seed(42)
A = pd.DataFrame(np.random.rand(3, 2), columns=['col1', 'col2'], index=['row1', 'row2', 'row3'])
B = pd.DataFrame(np.random.rand(3, 2), columns=['col1', 'col2'], index=['row1', 'row2', 'row3'])

合并并调整列层级,让原列名作为第一级,A/B作为子列:

# 按列方向合并A和B,用keys标记数据源
combined = pd.concat([A, B], axis=1, keys=['A', 'B'])
# 交换列层级顺序,再排序索引让结构更清晰
combined = combined.swaplevel(axis=1).sort_index(axis=1)

最终结果的列结构示例(打印combined):

col1               col2          
             A         B         A         B
row1  0.374540  0.155995  0.950714  0.058084
row2  0.731994  0.866176  0.598658  0.601115
row3  0.156019  0.708073  0.155995  0.020584

方法2:手动构造多级列并赋值

如果想更直观地控制列结构,可以手动创建多级列索引后填充数据:

# 构造多级列:原列名 × 数据源(A/B)
multi_cols = pd.MultiIndex.from_product(
    [A.columns, ['A', 'B']],
    names=['原始列', '数据源']
)

# 创建空DataFrame,指定索引和多级列
combined_df = pd.DataFrame(index=A.index, columns=multi_cols)

# 分别填充A和B的数据
combined_df.loc[:, (slice(None), 'A')] = A.values
combined_df.loc[:, (slice(None), 'B')] = B.values

此方法结果与方法1完全一致,逻辑更清晰。

数据访问示例

后续若要访问指定子列数据,比如col1下来自A的数据:

# 简洁写法
combined['col1']['A']
# 更严谨的索引方式
combined.loc[:, ('col1', 'A')]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 22:35:34