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

如何用pandas IndexSlice从列多层索引DataFrame选取分属不同层级的指定列?

用IndexSlice选取多层列索引的指定列子集

直接用pd.IndexSlice(通常简写为idx)就能一步完成,不用拼接。核心是把不同层级的列组合成元组列表或者用切片语法匹配,然后通过loc索引选取。

步骤示例:

假设你的DataFrame列结构是这样的MultiIndex:

MultiIndex([('virtual',  'x_mm'),
            ('virtual',  'y_mm'),
            ('virtual', 'z_mm'),
            ('actual',   'z_mm'),
            ('actual', 'rx_deg'),
            ('actual', 'ry_deg'),
            ('actual', 'rz_deg'),
            ('actual',  'x_mm')],
           names=['level_0', 'level_1'])
  1. 先定义IndexSlice别名(可选,但写起来更简洁):
import pandas as pd
idx = pd.IndexSlice
  1. 直接通过loc选取目标列:
# 方式1:明确列出所有(level_0, level_1)元组,精准控制
selected_cols = [
    ('virtual', 'x_mm'),
    ('virtual', 'y_mm'),
    ('actual', 'z_mm'),
    ('actual', 'rx_deg'),
    ('actual', 'ry_deg'),
    ('actual', 'rz_deg')
]
df_selected = df.loc[:, selected_cols]

# 方式2:用IndexSlice的批量匹配语法,更简洁
df_selected = df.loc[:, idx[['virtual', 'actual'], ['x_mm', 'y_mm', 'z_mm', 'rx_deg', 'ry_deg', 'rz_deg']]]
# 注:第二个层级的列表会自动匹配对应第一个层级的有效列,不会出现无效组合(比如virtual下的rz_deg会被自动过滤)

优势对比

  • 代码紧凑,一步完成,无需创建临时DataFrame再拼接
  • 完整保留原DataFrame的列索引层级结构,不会破坏数据组织逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 23:01:27