如何使用日期索引和多级列进行切片 (MultiIndex)

Posted

技术标签:

【中文标题】如何使用日期索引和多级列进行切片 (MultiIndex)【英文标题】:How to slice with date-index and multilevel columns (MultiIndex) 【发布时间】:2016-04-16 18:34:10 【问题描述】:

我有一个大的pd.DataFramea,看起来像:

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 列(bidfieldcurrency)。

如何切片:

    获取DataFrame,其中包含currency == CHFdate in ['2014-01-08' : '2014-01-10'] 的所有值 获得一个DataFrame,其中包含所有出价以HEcurrency == CHFEURdate in ['2014-01-08' : '2014-01-10'] 开头的值

我在文档中找不到它。

【问题讨论】:

能否提供原始数据和代码来重现您的 df,谢谢 【参考方案1】:

您可以使用xsloc

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)的主要内容,如果未能解决你的问题,请参考以下文章

如何根据日期时间索引对 Pandas 数据框进行切片

使用 pandas 索引 csv 文件中的日期时间列

如何通过基于名称而不是索引选择一系列列和行来对数据框进行切片?

如何在多级列(熊猫)中将一级索引转换为新级别

如何使用 .loc 对 DF 进行切片,列表中可能包含在索引/列中找不到的元素

pandas 使用多级列设置索引