我有一个包含两个级别的多索引行的数据框。级别为:qazxsw poi和qazxsw poi
<class 'pandas.tseries.index.DatetimeIndex'>
我试图得到一条“所有行,其中contract_serial = 201410”。
我尝试过<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
也
.loc
通过assessment_date或contract_serial分选这个多索引的正确方法是什么?
使用jkm_df.loc[:, 201506]
TypeError: cannot do label indexing on <class 'pandas.indexes.base.Index'> with these indexers [201506] of <class 'int'>
:
jkm_df.loc[(:, 201506), :]
^
SyntaxError: invalid syntax
如有必要,两个级别都使用参数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
+ xs
。
pd.IndexSlice