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

如何合并MultiIndex与SingleIndex DataFrame并保留结果的MultiIndex结构

问题描述

现有两个DataFrame:

  • dfA 为列是MultiIndex结构的DataFrame,数据如下:
fir    A      B    C
sec    Aa Ab  Ba   Ca  Cb
ind
1      1  2   2    2   1
2      1  2   2    2   1
4      1  2   2    2   1
  • dfB 为单级索引的DataFrame,数据如下:
ind
1
2
3
4
5

期望合并后仍保留原MultiIndex列结构,得到结果如下:

fir    A      B    C
sec    Aa Ab  Ba   Ca  Cb
ind
1      1  2   2    2   1
2      1  2   2    2   1
3      0  0   0    0   0
4      1  2   2    2   1
5      0  0   0    0   0

但使用以下代码后,列被扁平化,无法保留MultiIndex结构:

dfA = pd.merge(dfB,dfA,how='left',on='ind').fillna(0)
解决办法

方法1:使用reindex

直接基于dfB的索引对dfA重索引,填充缺失值为0,可完整保留原MultiIndex列结构:

result = dfA.reindex(dfB['ind']).fillna(0)

方法2:使用join

先将dfB设置以ind为索引,再与dfA左连接,最后填充缺失值:

# 确保dfB的索引为ind(若原dfB的ind是列)
dfB = dfB.set_index('ind')
result = dfB.join(dfA, how='left').fillna(0)

原因说明

merge会自动将MultiIndex列转换为扁平化的字符串(例如把('A', 'Aa')转为'A_Aa'),因为其设计更适配单级列索引场景,无法保留多级列结构。而reindex和join会尊重原DataFrame的列索引结构,因此能满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 09:40:25