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

如何将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 10:42:56