如何合并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
相关产品推荐
相关产品推荐

