Python/Pandas - 查询一个多级索引列

9

我正在尝试在MultiIndex列上使用查询。它适用于MultiIndex行,但不适用于列。有什么原因吗?文档显示了像下面第一个示例的示例,但它没有指出它不适用于MultiIndex列。

我知道有其他方法可以做到这一点,但我特别想使用查询函数

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.random((4,4)))
df.index = pd.MultiIndex.from_product([[1,2],['A','B']])
df.index.names = ['RowInd1', 'RowInd2']
# This works
print(df.query('RowInd2 in ["A"]'))

df = pd.DataFrame(np.random.random((4,4)))
df.columns = pd.MultiIndex.from_product([[1,2],['A','B']])
df.columns.names = ['ColInd1', 'ColInd2']
# query on index works, but not on the multiindexed column
print(df.query('index < 2'))
print(df.query('ColInd2 in ["A"]'))

你读过这个答案了吗? - rpanai
3
是的,我知道有xs和其他方法,正如我在加粗的问题中指出的那样。我特别寻找一种使用query函数来完成这个任务的方法。答案可能是不可能实现。我认为也许可以使用稍微不同的语法来查询多索引列。 - Scott B
我完全错过了粗体字的那句话。我的错。 - rpanai
2个回答

1

0

您可以使用 IndexSlice

df.query('ilevel_0>2')
Out[327]: 
ColInd1         1                  2          
ColInd2         A         B        A         B
3        0.652576  0.639522  0.52087  0.446931
df.loc[:,pd.IndexSlice[:,'A']]
Out[328]: 
ColInd1         1         2
ColInd2         A         A
0        0.092394  0.427668
1        0.326748  0.383632
2        0.717328  0.354294
3        0.652576  0.520870

4
我知道这一点,但我特别想找一种用查询函数实现的方法。答案可能是不可能,但我认为也许有一种略微不同的语法可以用于查询多级索引列。 - Scott B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接