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

如何提取MultiIndex中first层级前两个索引值的全部数据?

提取MultiIndex中前两个first层级索引对应的数据

假设我们已经通过以下代码构建了带有MultiIndex的DataFrame:

import pandas as pd

df = pd.DataFrame(data=[["A", "B", 12], ["A", "B", 143], ["C1", "C1", 11], ["C1", "C1", 11],["C1", "C1", 11], ["C3", "C4", 11]], columns=["first", "secound", "data"])
df.set_index(["first", "secound"], inplace=True)

生成的DataFrame结构如下:

data
first secound     
A     B        12
      B       143
C1    C1       11
      C1       11
      C1       11
C3    C4       11

要提取first索引层级中前两个唯一值对应的全部数据,这里提供几种实用的实现方法:

方法一:利用isin结合唯一值筛选

这是最直观的方法,先获取first层级的前两个唯一索引值,再筛选匹配的行:

# 获取first层级的前两个唯一索引值
top_two_first = df.index.get_level_values('first').unique()[:2]
# 筛选符合条件的数据
filtered_df = df[df.index.get_level_values('first').isin(top_two_first)]

运行后得到的结果就是我们期望的:

data
first secound     
A     B        12
      B       143
C1    C1       11
      C1       11
      C1       11

方法二:使用IndexSlice优雅筛选

对于MultiIndex的场景,pandas的IndexSlice可以让我们更清晰地针对不同层级做切片操作:

from pandas import IndexSlice

# 获取前两个唯一的first索引值
top_two = df.index.get_level_values('first').unique()[:2]
# 通过IndexSlice筛选
filtered_df = df.loc[IndexSlice[top_two, :], :]

这里IndexSlice[top_two, :]表示:在first层级取top_two中的所有值,secound层级取所有值,最终得到的结果和方法一完全一致。

方法三:直接指定索引值(适用于已知索引值的场景)

如果你已经明确知道前两个first索引值是"A"和"C1",也可以直接通过loc切片:

filtered_df = df.loc[["A", "C1"], :]

这种方法更简洁,但缺点是硬编码了索引值,适合索引值固定的场景;如果索引值是动态生成的,还是前两种方法更通用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:11:43