如何提取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
相关产品推荐
相关产品推荐

