2017-12-29 11 views
0

私は2レベルのマルチインデックス行を持つデータフレームを持っています。 <class 'pandas.tseries.index.DatetimeIndex'><class 'pandas.indexes.numeric.Int64Index'>マルチインデックス行をスライスする - 'ラベルインデックスを作成できません'

        px_settlement contract_code 
assessment_date contract_serial        
2014-01-02  201402     18.640   g14 
       201403     17.530   h14 
       201404     16.600   j14 
       201405     15.900   k14 
       201406     16.100   m14 
       201407     16.200   n14 
       201408     15.210   q14 
       201409     15.210   u14 
       201410     15.210   v14 
       201411     15.210   x14 

私は例えば「すべての行contract_serial = 201410」のスライスを取得しようとしている:のレベルがタイプです。

私はassessment_dateまたはcontract_serialことで、このマルチインデックスを副選択する正しい方法は何ですか?

jkm_df.loc[(:, 201506), :] 
      ^
SyntaxError: invalid syntax 

.loc

jkm_df.loc[:, 201506] 

TypeError: cannot do label indexing on <class 'pandas.indexes.base.Index'> with these indexers [201506] of <class 'int'> 

のいくつかのバリエーションを試してみた

+0

'idx = pd.IndexSlice; df.loc [idx [:, 201410]、:] ' –

+0

@coldspeedすごい、早く、ありがとう! – user3556757

答えて

2

使用DataFrame.xs

print (jkm_df.xs(201406, level=1)) 
       px_settlement contract_code 
assessment_date        
2014-01-02    16.1   m14 

また両方のレベルがパラメータdrop_level=False使用し、必要な場合:

print (jkm_df.xs(201406, level=1, drop_level=False)) 
           px_settlement contract_code 
assessment_date contract_serial        
2014-01-02  201406     16.1   m14 

ソリューションlocとを:

print (jkm_df.loc(axis=0)[:, 201406]) 
           px_settlement contract_code 
assessment_date contract_serial        
2014-01-02  201406     16.1   m14 

slicersのもう一つの解決策:

print (jkm_df.loc[(slice(None), 201406), :]) 
           px_settlement contract_code 
assessment_date contract_serial        
2014-01-02  201406     16.1   m14 
+0

私は答えとしてIndexSliceを追加するつもりです、それはいいですか? –

+0

それはあなた次第です。 – jezrael

+1

乾杯、幸せな休日! –

2

xsは、スカラー値を取得するのに適しています。もう1つのソリューション(柔軟性が少し高い)は、pd.IndexSlice + locを使用しています。

idx = pd.IndexSlice 
df.loc[idx[:, 201410], :] 

           px_settlement contract_code 
assessment_date contract_serial        
2014-01-02  201406     16.1   m14 
関連する問題