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

如何按条件切片Pandas多级索引:保留二级索引同时含1和2的行

解决多级索引DataFrame的筛选需求

要保留二级索引同时包含1和2的行,核心是先筛选出一级索引中对应二级索引同时存在1和2的分组,再提取这些分组的所有行。以下是两种实用实现方式:

方法一:使用groupby.filter(简洁直观)

通过对一级索引分组,筛选出二级索引包含{1,2}的组:

import pandas as pd
import numpy as np

# 构造原DataFrame(与问题中一致)
df = pd.DataFrame(
    np.random.randn(12),
    index=[
        [1,1,2,3,4,4,5,5,6,6,7,8],
        [1,2,1,1,1,2,1,2,1,2,2,2],
    ]
)

# 筛选目标行
filtered_df = df.groupby(level=0).filter(lambda x: {1,2}.issubset(x.index.get_level_values(1)))
print(filtered_df)

逻辑:groupby(level=0)按一级索引分组,filter中的lambda函数检查当前组的二级索引是否同时包含1和2,保留符合条件的整个组。

方法二:先提取有效一级索引再切片(灵活可控)

先找出所有符合条件的一级索引,再直接切片原DataFrame:

# 获取每个一级索引对应的二级索引集合
valid_first_level = (
    df.index.get_level_values(0)
    .to_series()
    .groupby(level=0)
    .apply(lambda x: set(df.loc[x.name].index))
    .loc[lambda s: {1,2}.issubset(s)]
    .index
)

# 根据有效一级索引切片
filtered_df = df.loc[valid_first_level]
print(filtered_df)

逻辑:先统计每个一级索引对应的二级索引值集合,筛选出包含{1,2}的一级索引,再用这些索引提取原DataFrame的对应行。

两种方法都能得到你需要的结果,第一种更简洁,第二种适合需要单独复用有效一级索引的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 16:22:32