Pandas复制多级索引DataFrame列时保留二级表头的方法
问题原因
带两级表头的DataFrame列是MultiIndex结构,每一列的唯一标识是(一级列名, 二级列名)形式的元组。直接执行df['D'] = df['A']时,赋值左侧仅传入了一级列名D,没有指定对应的二级列名,pandas会默认将新列的二级索引置空,最终就会出现二级表头缺失的情况。
解决方法
根据复制场景选对应写法即可:
- 若要复制的一级列下只有单个二级子列(即示例中A列下只有a的场景),直接显式指定两级列名元组赋值,代码最简洁:
# 新列名传入(一级名, 二级名)元组,二级名和原列保持一致即可 df[('D', 'a')] = df[('A', 'a')]
- 若要复制的一级列下有多个二级子列,想要一次性完整保留所有二级表头,用通用写法即可,不需要手动枚举二级列名:
# 提取要复制的原列组 copy_part = df['A'].copy() # 将提取部分的一级列名替换为新列名D,原有二级列名全部保留 copy_part.columns = pd.MultiIndex.from_product( [['D'], copy_part.columns] ) # 拼接回原DataFrame df = pd.concat([df, copy_part], axis=1)
效果验证
运行上述代码后打印df,即可得到预期输出:
A B C D a b c a 0 1 2 3 1 1 4 5 6 4 2 7 8 9 7
内容的提问来源于stack exchange,提问作者SchtungDung
相关产品推荐
相关产品推荐

