如何筛选多层索引DataFrame中包含特定值的索引对应的全部行
实现方法
你可以通过两步完成筛选:先定位所有包含目标pageid的一级索引sid,再用这些sid过滤原表所有匹配的行,代码如下:
完整示例代码
import pandas as pd # 构造示例DataFrame data = {'pageid': ['dog', 'cat', 'fish', 'pig', 'cat', 'fish', 'pig', 'cat', 'dog']} index = pd.MultiIndex.from_tuples( [(1, 'ABC'), (1, 'ABC'), (1, 'ABC'), (2, 'DEF'), (2, 'DEF'), (2, 'DEF'), (3, 'GHI'), (3, 'GHI'), (3, 'GHI')], names=['sid', 'vid'] ) df = pd.DataFrame(data, index=index) # 配置筛选目标 target_pageid = 'dog' # 1. 提取所有包含目标pageid的sid列表 target_sids = df[df['pageid'] == target_pageid].index.get_level_values('sid').unique() # 2. 过滤保留对应sid的所有行 result_df = df[df.index.isin(target_sids, level='sid')] print(result_df)
代码说明
index.get_level_values('sid'):获取多级行索引中sid层级的所有值unique():对匹配到的sid去重,避免后续筛选重复判断index.isin(target_sids, level='sid'):指定按sid层级判断索引是否在目标列表中,匹配成功则保留该sid下的所有行
运行输出的result_df就是你需要的处理后结果。
内容的提问来源于stack exchange,提问作者S44
相关产品推荐
相关产品推荐

