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

如何在Pandas中同时选取MultiIndex列与普通列?

解决混合MultiIndex与普通列的选取问题

当你的DataFrame列同时存在MultiIndex(如('rotation', 'x'))和普通字符串列(如'n_frames')时,直接混合使用元组和字符串选列会失败——原因是pandas要求列索引的元素类型统一,混合元组和字符串会导致匹配逻辑混乱。

解决方案步骤:

  1. 统一列索引格式
    先把所有列名转换成相同长度的元组(和MultiIndex的层级数一致),缺失的层级用空字符串填充:

    import pandas as pd
    
    # 基于你的实际数据处理列索引
    df.columns = pd.MultiIndex.from_tuples(
        [col if isinstance(col, tuple) else (col, '') for col in df.columns],
        names=['level1', 'level2']  # 可根据实际需求命名层级
    )
    
  2. 正确选取目标列
    现在所有列都是元组格式,直接用元组指定即可同时选取两类列:

    # 选取('rotation', 'x')和('n_frames', '')列
    selected_df = df.loc[:, [('rotation', 'x'), ('n_frames', '')]]
    

针对你给出的示例表格

原表格中列'2'属于普通列,统一格式后变为('2', ''),选取['0','A']和'2'的代码应为:

df.loc[:, [('0', 'A'), ('2', '')]]

其他便捷选取方式

如果想快速选取某一层级下的所有子列+普通列,也可以用层级筛选:

# 筛选level1为'rotation'且level2为'x',或level1为'n_frames'的列
mask = (df.columns.get_level_values(0) == 'rotation') & (df.columns.get_level_values(1) == 'x') | (df.columns.get_level_values(0) == 'n_frames')
selected_df = df.loc[:, mask]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 14:02:56