Python/Pandas - 查询多索引列 [重复]

Posted

技术标签:

【中文标题】Python/Pandas - 查询多索引列 [重复]【英文标题】:Python/Pandas - Query a MultiIndex Column [duplicate] 【发布时间】:2019-01-01 07:58:19 【问题描述】:

我正在尝试对 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"]'))

【问题讨论】:

你读过这个answer吗? 是的,我知道有 xs 和其他方法,正如我在问题中以粗体表示的那样。我正在专门寻找一种使用查询功能执行此操作的方法。答案可能是不可能的。我想也许有一种稍微不同的语法可用于查询多索引列。 我完全错过了粗体字。我的错。 【参考方案1】:

您可以使用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

【讨论】:

我知道这一点,但我正在专门寻找一种方法来使用查询功能来做到这一点。答案可能是不可能的,但我认为可能有一种稍微不同的语法可用于查询多索引列。【参考方案2】:

要回答我自己的问题,根据此处的答案,看起来根本不应该使用查询(无论使用 MultiIndex 列)来选择某些列:

Select columns using pandas dataframe.query()

【讨论】:

以上是关于Python/Pandas - 查询多索引列 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在多索引列上使用 pandas rename()?

python pandas:重命名多索引数据框中的单列标签

使用 pandas 连接多索引列

具有多索引列的 Pandas groupby

pandas 透视多索引列

枢轴熊猫数据框具有多索引列