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

如何从多层列索引的Pandas DataFrame按指定层级列名筛选?

三级列索引DataFrame按层级筛选列的方法

假设你已经有了一个三级列索引的Pandas DataFrame df,结构如下:

a1            a2            a3
     b1     b2     b1     b3     b1     b4
     c1 c2  c1 c2  c1 c2  c1 c2  c1 c2  c1 c2
     ... (数据内容) ...

下面直接给出两种场景的筛选方法:

1. 筛选所有第三层级(c级)为c2的列

利用get_level_values定位第三层级索引(层级索引从0开始计数,第三层对应索引2),筛选后可通过droplevel去掉原第三层索引,得到仅保留a、b两层的结果结构:

# 筛选所有c2列
c2_cols = df.loc[:, df.columns.get_level_values(2) == 'c2']
# 移除第三层级索引,保留a、b层级
c2_result = c2_cols.droplevel(level=2, axis=1)

最终结果结构:

a1     a2     a3
     b1 b2  b1 b3  b1 b4
     ... (c2列对应的数据) ...

2. 筛选所有第二层级(b级)为b1的列

同理,定位第二层级索引(对应索引1),筛选后移除第二层索引,保留a、c两层结构:

# 筛选所有b1列
b1_cols = df.loc[:, df.columns.get_level_values(1) == 'b1']
# 移除第二层级索引,保留a、c层级
b1_result = b1_cols.droplevel(level=1, axis=1)

最终结果结构:

a1     a2     a3
     c1 c2  c1 c2  c1 c2 
     ... (b1列对应的数据) ...

如果需要保留原三级索引结构仅筛选目标列,直接使用df.loc[:, df.columns.get_level_values(n) == '目标值']即可,其中n对应层级索引(0为a层,1为b层,2为c层)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 08:10:21