如何使用嵌套级别查询MultiIndex?

时间:2019-02-27 08:37:57

标签: pandas

我正在尝试将query与具有多个列级别的MultiIndex一起使用。

!pip install pandas-datareader --quiet

下一步...

from pandas_datareader import DataReader

df = DataReader(["SPY", "XOM"],  "yahoo", datetime(2012,7,1), datetime(2018,7,21))
df.keys()

返回...

MultiIndex(levels=[['High', 'Low', 'Open', 'Close', 'Volume', 'Adj Close'], ['SPY', 'XOM']],
           labels=[[0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1]],
           names=['Attributes', 'Symbols'])

还有

df['High']['SPY'].head()

返回...

Date
2012-07-02    136.649994
2012-07-03    137.509995
2012-07-05    137.800003
2012-07-06    135.770004
2012-07-09    135.570007
Name: SPY, dtype: float64

我想知道如何将query用于多个级别?我在想这样的事情?

df.query('High.SPY > 137')

1 个答案:

答案 0 :(得分:2)

AFAIU仅部分受支持-请参见GH上的this issue

该帖子建议使用以下语法:

df.query('@df.High.SPY > 137')

如果您不需要使用query,则可以使用loc

df.loc[:, ('High', 'SPY')][df.loc[:, ('High', 'SPY')] > 137]

或者:

df[df.loc[:, ('High', 'SPY')] > 137].loc[:,('High', 'SPY')]


Date
2012-07-03    137.509995
2012-07-05    137.800003
2012-07-18    137.639999
2012-07-19    138.179993
2012-07-20    137.160004
2012-07-27    139.070007
2012-07-30    139.339996
2012-07-31    138.869995
...