Python 如何按列值筛选多索引数据帧

Python 如何按列值筛选多索引数据帧,python,pandas,dataframe,multi-index,Python,Pandas,Dataframe,Multi Index,给定股票价格的数据框架,我对基于最新收盘价的过滤感兴趣。我知道如何对一个简单的数据帧执行此操作,但不知道如何对多索引数据帧执行此操作 简单数据帧: AAPL AMZN GOOG MSFT 2021-02-08 136.91 3322.94 2092.91 242.47 2021-02-09 136.01 3305.00 2083.51 243.77 2021-02-10 135.39 3286.58 2095.38 242

给定股票价格的数据框架,我对基于最新收盘价的过滤感兴趣。我知道如何对一个简单的数据帧执行此操作,但不知道如何对多索引数据帧执行此操作

简单数据帧:

              AAPL     AMZN     GOOG    MSFT
2021-02-08  136.91  3322.94  2092.91  242.47
2021-02-09  136.01  3305.00  2083.51  243.77
2021-02-10  135.39  3286.58  2095.38  242.82
2021-02-11  135.13  3262.13  2095.89  244.49
2021-02-12  135.37  3277.71  2104.11  244.99
操作:
df.loc[:,df.iloc[-1]<250]

输出:

              AAPL    MSFT
2021-02-08  136.91  242.47
2021-02-09  136.01  243.77
2021-02-10  135.39  242.82
2021-02-11  135.13  244.49
2021-02-12  135.37  244.99

但是,我不知道如何在具有多索引(如OHLC)的数据帧上实现这一点

多索引数据帧:

             Close                              High                               Low  ...            Open                              Volume                            
              AAPL     AMZN     GOOG    MSFT    AAPL     AMZN     GOOG    MSFT    AAPL  ...    MSFT    AAPL     AMZN     GOOG    MSFT      AAPL     AMZN     GOOG      MSFT
2021-02-08  136.91  3322.94  2092.91  242.47  136.96  3365.00  2123.55  243.68  134.92  ...  240.81  136.03  3358.50  2105.91  243.15  71297200  3257400  1241900  22211900
2021-02-09  136.01  3305.00  2083.51  243.77  137.88  3338.00  2105.13  244.76  135.85  ...  241.38  136.62  3312.49  2078.54  241.87  76774200  2203500   889900  23565000
2021-02-10  135.39  3286.58  2095.38  242.82  136.99  3317.95  2108.37  245.92  134.40  ...  240.89  136.48  3314.00  2094.21  245.00  73046600  3151600  1135500  22186700
2021-02-11  135.13  3262.13  2095.89  244.49  136.39  3292.00  2102.03  245.15  133.77  ...  242.15  135.90  3292.00  2099.51  244.78  64280000  2301400   945700  15751100
2021-02-12  135.37  3277.71  2104.11  244.99  135.53  3280.25  2108.82  245.30  133.69  ...  242.73  134.35  3250.00  2090.25  243.93  60029300  2329300   855700  16552000

[5 rows x 20 columns]
过滤器:
df_Filter=df.iloc[-1].loc['Close']<250

AAPL     True
AMZN    False
GOOG    False
MSFT     True
Name: 2021-02-12 00:00:00, dtype: bool
操作??:

可能类似于
df.loc[:,filter]
但我收到了错误:

pandas.core.index.IndexingError:作为索引器提供的不可对齐的布尔序列(布尔序列的索引与索引对象的索引不匹配)

我知道这是一个多索引,所以我也尝试使用
pd.indexlice
df.loc[:,idx[:,df_filter]]
,但仍然得到:

ValueError:无法使用与索引长度不同的布尔索引器进行索引

期望输出:

             Close            High             Low            Open            Volume          
              AAPL    MSFT    AAPL    MSFT    AAPL    MSFT    AAPL    MSFT      AAPL      MSFT
2021-02-08  136.91  242.47  136.96  243.68  134.92  240.81  136.03  243.15  71297200  22211900
2021-02-09  136.01  243.77  137.88  244.76  135.85  241.38  136.62  241.87  76774200  23565000
2021-02-10  135.39  242.82  136.99  245.92  134.40  240.89  136.48  245.00  73046600  22186700
2021-02-11  135.13  244.49  136.39  245.15  133.77  242.15  135.90  244.78  64280000  15751100
2021-02-12  135.37  244.99  135.53  245.30  133.69  242.73  134.35  243.93  60029300  16552000

我不确定
indexlice
是否适用于布尔索引。您可以尝试传递有效索引:

df.loc[:,pd.IndexSlice[:, df_filter.index[df_filter]]]