筛选指定条件的多级索引DataFrame

110 阅读1分钟

.loc[pd.IndexSlice[:, brand], :]的使用方法。

假设我们有一个多级索引的DataFrame,如下所示:

import pandas as pd

# 创建一个多级索引的DataFrame
data = {
    'A': [1, 2, 3, 4, 5],
    'B': [10, 20, 30, 40, 50]
}
index = pd.MultiIndex.from_tuples([('X', 'Apple'), ('X', 'Banana'), ('Y', 'Apple'), ('Y', 'Banana'), ('Z', 'Apple')], names=['Region', 'Fruit'])
df = pd.DataFrame(data, index=index)
print(df)

这会生成以下DataFrame:

              A   B
Region Fruit       
X      Apple  1  10
       Banana 2  20
Y      Apple  3  30
       Banana 4  40
Z      Apple  5  50

现在,假设我们想选择所有'Apple'品种的数据,不考虑它们所属的地区。我们可以使用.loc[pd.IndexSlice[:, 'Apple'], :]来实现这个目的:

selected = df.loc[pd.IndexSlice[:, 'Apple'], :]
print(selected)

输出结果为:

              A   B
Region Fruit       
X      Apple  1  10
Y      Apple  3  30
Z      Apple  5  50

解释一下这个操作:

  • pd.IndexSlice[:, 'Apple'] 创建了一个索引切片,其中第一个维度(地区)可以是任意值,第二个维度(水果种类)必须为'Apple'。
  • .loc[pd.IndexSlice[:, 'Apple'], :] 使用这个索引切片来选择DataFrame中符合条件的行。具体来说,它选择了所有地区中水果种类为'Apple'的行,并且保留了所有的列。

因此,.loc[pd.IndexSlice[:, 'Apple'], :]是一个非常有用的工具,特别适用于处理多级索引的DataFrame,可以方便地选择特定级别的数据片段。