如何使用日期索引和多级列进行切片 (MultiIndex)
Posted
技术标签:
【中文标题】如何使用日期索引和多级列进行切片 (MultiIndex)【英文标题】:How to slice with date-index and multilevel columns (MultiIndex) 【发布时间】:2016-04-16 18:34:10 【问题描述】:我有一个大的pd.DataFrame
、a
,看起来像:
bid TIT IM Equity HELN SE Equity FHZN SE Equity GLEN LN Equity
field LAST_PRICE LAST_PRICE LAST_PRICE LAST_PRICE
currency EUR CHF CHF GBp
2013-12-31 NaN NaN NaN 285.954
2014-01-02 0.7085 NaN NaN 283.942
... ... ... ... ...
2014-01-08 0.7990 422.65 511.46 287.875
2014-01-09 0.8095 421.26 514.35 283.165
2014-01-10 0.8135 423.35 514.83 291.487
2014-01-13 0.8065 417.78 515.79 291.670
索引是 dates
,我有 3 个级别的 MultiIndex 列(bid
、field
、currency
)。
如何切片:
-
获取
DataFrame
,其中包含currency == CHF
和date in ['2014-01-08' : '2014-01-10']
的所有值
获得一个DataFrame
,其中包含所有出价以HE
和currency == CHF
或EUR
和date in ['2014-01-08' : '2014-01-10']
开头的值
我在文档中找不到它。
【问题讨论】:
能否提供原始数据和代码来重现您的 df,谢谢 【参考方案1】:您可以使用xs
或loc
:
print df['2014-01-08' : '2014-01-10'].xs('CHF',level=2,axis=1)
bid HELN SE Equity FHZN SE Equity
field LAST_PRICE LAST_PRICE
2014-01-08 422.65 511.46
2014-01-09 421.26 514.35
2014-01-10 423.35 514.83
#sort multicolumns
df = df.sort_index(axis=1)
he = tuple([s for s in df.columns.levels[0].tolist() if 'HE' in s[:2]])
print he
#('HELN SE Equity',)
print df.loc['2014-01-08' : '2014-01-10', (he, slice(None), ['CHF','EUR'])]
bid HELN SE Equity
field LAST_PRICE
currency CHF
2014-01-08 422.65
2014-01-09 421.26
2014-01-10 423.35
Docs.
【讨论】:
以上是关于如何使用日期索引和多级列进行切片 (MultiIndex)的主要内容,如果未能解决你的问题,请参考以下文章
如何通过基于名称而不是索引选择一系列列和行来对数据框进行切片?