我正在尝试将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')
答案 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
...