df
multi_levelインデックスを持つサンプルのPandasデータフレームがあります。
>>> df
STK_Name ROIC mg_r
STK_ID RPT_Date
002410 20111231 ??? 0.401 0.956
300204 20111231 ??? 0.375 0.881
300295 20111231 ???? 2.370 0.867
300288 20111231 ???? 1.195 0.861
600106 20111231 ???? 1.214 0.857
300113 20111231 ???? 0.837 0.852
とstk_list
定義されていますstk_list = ['600106','300204','300113']
df
sub_levelindexの値STK_ID
が内にある行を取得したいstk_list
。出力は次のとおりです。
STK_Name ROIC mg_r
STK_ID RPT_Date
300204 20111231 ??? 0.375 0.881
600106 20111231 ???? 1.214 0.857
300113 20111231 ???? 0.837 0.852
基本的に、このサンプルデータの目標は次の方法で達成できます。
df = df.reset_index() ; df[df.STK_ID.isin(stk_list)]
ただし、アプリケーションデータフレームにはすでに「STK_ID」と「RPT_Date」の列があるため、reset_index()でエラーが発生します。とにかく、列ではなくインデックスに対して直接フィルタリングしたいと思います。
これから学ぶ:パンダのサブレベルインデックスでフィルタリングする方法
試してみるとdf[df.index.map(lambda x: x[0].isin(stk_list))]
、Pandas 0.8.1はAttributeError: 'unicode' object has no attribute 'isin'
、
reset_index()
私の質問: &set_index()
メソッドを使用せずにリスト内のサブレベルのインデックス値をチェックすることにより、Pandasデータフレームの行をどのようにフィルタリングする必要がありますか?