如何将df2的最后两列索引层级添加至已有多列索引的Pandas DataFrame?
最优实现:将df2的最后两级列索引添加到df1的多列索引中
我有两个带多列索引的Pandas DataFrame,二者列数完全一致。需要将df2的最后两个列索引层级(level9和level10)添加至df1的列索引中,请问最优实现方式是什么?
示例代码
import pandas as pd columns_df1 = pd.MultiIndex.from_tuples([ ('A', 1, 'X', 'Y', 'Z'), ('B', 2, 'X', 'Y', 'Z'), ('C', 3, 'X', 'Y', 'Z') ], names=['level1', 'level2', 'level3', 'level4', 'level5']) df1 = pd.DataFrame([[1, 2, 3]], columns=columns_df1) columns_df2 = pd.MultiIndex.from_tuples([ ('D', 4, 'P', 'Q', 'R'), ('E', 5, 'P', 'Q', 'R'), ('F', 6, 'P', 'Q', 'R') ], names=['level6', 'level7', 'level8', 'level9', 'level10']) df2 = pd.DataFrame([[4, 5, 6]], columns=columns_df2) print(df1) print(df2)
原输出结果
df1输出:
level1 A B C level2 1 2 3 level3 X X X level4 Y Y Y level5 Z Z Z 0 1 2 3
df2输出:
level6 D E F level7 4 5 6 level8 P P P level9 Q Q Q level10 R R R 0 4 5 6
预期结果
level1 A B C level2 1 2 3 level3 X X X level4 Y Y Y level5 Z Z Z level9 Q Q Q level10 R R R 0 1 2 3
最优实现方案
直接利用Pandas的MultiIndex原生方法提取、拼接索引,步骤清晰且效率高:
# 提取df2最后两级列索引的标签和名称 last_two_levels = [df2.columns.get_level_values(-2), df2.columns.get_level_values(-1)] last_two_names = df2.columns.names[-2:] # 将df1的现有索引与新提取的两级索引拼接,生成新的多列索引 new_columns = pd.MultiIndex.from_arrays( list(df1.columns.to_arrays()) + last_two_levels, names=df1.columns.names + last_two_names ) # 把新索引赋值给df1 df1.columns = new_columns # 查看结果 print(df1)
方案说明
- 用
get_level_values(-2)和get_level_values(-1)直接定位df2的最后两级索引,无需手动指定层级名称,适配任意多级索引场景; - 通过
from_arrays拼接索引数组,保留原索引的结构和名称; - 全程基于Pandas内置方法操作,避免循环,处理大数据量时性能更优。
内容的提问来源于stack exchange,提问作者Andi
相关产品推荐
相关产品推荐

