熊猫在多级索引数据框架中选择行



我想知道为什么存在功能以访问按KEY访问多级索引系列的行,但是数据范围不存在。

例如,我有以下数据框:

    index_1 index_2 num_1   num_2
0   a       c       1       2
1   a       c       4       3
2   a       c       3       4
3   a       d       2       3
4   b       d       3       1
5   b       d       2       3

我现在执行以下组件操作:

group_single_col = test.groupby(['index_1', 'index_2'])['num_1'].max()

我没有问题:

group_single_col[('a')]

group_single_col[('a', 'c')]

这是一个惊人的功能,使我可以根据不同索引级别的值进行切片。

但是,如果我进行组并提取多个列,请如下:

group_double_col = test.groupby(['index_1', 'index_2'])[['num_1', 'num_2]].max()

返回的对象是一个数据框架,尽管实现了多级索引,但操作类似于:

group_double_col[('a')] 

失败。

我知道在第一个情况下返回了一个系列,在第二种情况下,返回了数据框,但我仍然认为该功能应与数据框架正常工作。

后续问题是,在数据框架的情况下,有什么解决方法?

目前我做:

grouped[(grouped.index.get_level_values('index_1')=='a')]

,但我质疑是否有更有效的方法。

您可以使用xs

print (group_double_col.xs('a', axis=0, level=0))
         num_1  num_2
index_2              
c            4      4
d            2      3
print (group_double_col.xs('a', axis=0, level=0, drop_level=False))
                 num_1  num_2
index_1 index_2              
a       c            4      4
        d            2      3

最新更新