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

MultiIndex列选择:如何组合不同Sample的指定T值列筛选

多索引列DataFrame的多条件列筛选

问题描述

给定一个列是多层索引(MultiIndex)的DataFrame,构造代码如下:

import pandas as pd
import numpy as np

arrays = [['A','A','B','B','C','C'],[1,1,3,3,5,5],[2,2,4,4,6,6],[0.1,0.2,0.3,0.4,0.5,0.6]]
index = pd.MultiIndex.from_arrays(arrays, names=('Sample','P1','P2','T'))
data = np.random.rand(10,6)
df = pd.DataFrame(columns=index, data=data)

需要筛选出Sample为A且T=0.2的列,以及Sample为C且T=0.5的列。单独筛选单个条件的列可以通过slice(None)实现,但直接用元组列表组合筛选会报错。要求不使用pd.concat完成筛选。

可行方案

方案1:布尔掩码筛选

通过提取列索引的层级值生成布尔条件,再组合筛选:

# 生成两个条件的布尔掩码
cond_a = (df.columns.get_level_values('Sample') == 'A') & (df.columns.get_level_values('T') == 0.2)
cond_c = (df.columns.get_level_values('Sample') == 'C') & (df.columns.get_level_values('T') == 0.5)

# 合并条件并筛选列
filtered_df = df.loc[:, cond_a | cond_c]

方案2:使用pd.IndexSlice组合切片

利用pd.IndexSlice(可简写为idx)包装每个筛选规则,再传入列表作为列参数:

idx = pd.IndexSlice

# 直接传入多组切片规则
filtered_df = df.loc[:, [idx['A', :, :, 0.2], idx['C', :, :, 0.5]]]

IndexSlice会自动解析每个切片对应的多索引层级,避免直接使用元组列表导致的索引匹配错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 13:57:14