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]]]