我想知道为什么存在功能以访问按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