如何从多层列索引的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
相关产品推荐
相关产品推荐

