簡體   English   中英

如何通過第二層重新使用MultiIndex DataFrame

[英]How to resort a MultiIndex DataFrame by second level

我有一個DataFrame具有MultiIndex 索引字段是OptionSymbol (級別0)和QuoteDatetime (級別1)。 我已經對DataFrame進行了索引和排序, DataFrame所示:

sorted = df.sort_values(
    ['OptionSymbol', 'QuoteDatetime'], 
    ascending=[False, True]
)

indexed = sorted.set_index(
    ['OptionSymbol', 'QuoteDatetime'],
    drop=True
)

結果如下:

                                      Id  Strike Expiration OptionType
OptionSymbol       QuoteDatetime                                      
ZBYMZ              2013-09-02     234669   170.0 2011-01-22        put
                   2013-09-03     234901   170.0 2011-01-22        put
                   2013-09-04     235133   170.0 2011-01-22        put
  ...                     ...        ...     ...        ...        ...
YBWNA              2010-02-12     262202    95.0 2010-02-20       call
                   2010-02-16     262454    95.0 2010-02-20       call
                   2010-02-17     262707    95.0 2010-02-20       call
  ...                     ...        ...     ...        ...        ...
XWNAX              2012-07-12     262201    90.0 2010-02-20       call
                   2012-07-16     262453    90.0 2010-02-20       call
                   2012-07-17     262706    90.0 2010-02-20       call
  ...                     ...        ...     ...        ...        ...
WWWAX              2012-04-12     262201    90.0 2010-02-20       call
                   2012-04-16     262453    90.0 2010-02-20       call
                   2012-04-17     262706    90.0 2010-02-20       call
  ...                     ...        ...     ...        ...        ...

如預期的那樣,首先OptionSymbol組中OptionSymbol降序和升序對幀進行排序。

我需要做的是立即使用QuoteDatetime的第一個值,因此結果如下所示:

                                      Id  Strike Expiration OptionType
OptionSymbol       QuoteDatetime                                      
XBWNA              2010-02-12     262202    95.0 2010-02-20       call
                   2010-02-16     262454    95.0 2010-02-20       call
                   2010-02-17     262707    95.0 2010-02-20       call
  ...                     ...        ...     ...        ...        ...
NWWAX              2012-04-12     262201    90.0 2010-02-20       call
                   2012-04-16     262453    90.0 2010-02-20       call
                   2012-04-17     262706    90.0 2010-02-20       call
  ...                     ...        ...     ...        ...        ...
BWNAX              2012-07-12     262201    90.0 2010-02-20       call
                   2012-07-16     262453    90.0 2010-02-20       call
                   2012-07-17     262706    90.0 2010-02-20       call
  ...                     ...        ...     ...        ...        ...
XBYMZ              2013-09-02     234669   170.0 2011-01-22        put
                   2013-09-03     234901   170.0 2011-01-22        put
                   2013-09-04     235133   170.0 2011-01-22        put
  ...                     ...        ...     ...        ...        ...

我嘗試了各種通過index = 1進行OptionSymbol方法,但是后來我失去了OptionSymbol組。 我該怎么做?

使用代碼進行編輯以重新創建

from collections import OrderedDict
df = OrderedDict((
    ('OptionSymbol', pd.Series(['ZBYMZ', 'ZBYMZ', 'ZBYMZ', 'YBWNA', 'YBWNA', 'YBWNA', 'XWNAX', 'XWNAX', 'XWNAX', 'WWWAX', 'WWWAX', 'WWWAX', ])),
    ('QuoteDatetime', pd.Series(['2013-09-02', '2013-09-03', '2013-09-04', '2010-02-12', '2010-02-16', '2010-02-17', '2012-07-12', '2012-07-16', '2012-07-17', '2012-04-12', '2012-04-16', '2012-04-17'])),
    ('Id', pd.Series(np.random.randn(12,))),
    ('Strike', pd.Series(np.random.randn(12,))),
    ('Expiration', pd.Series(np.random.randn(12,))),
    ('OptionType', pd.Series(np.random.randn(12,)))
))

在這種情況下,使用df.sort_index(level=1)奇怪,但是在我的整個數據集(超過20列)上,我卻失去了OptionSymbol分組的OptionSymbol

IIUC您可以簡單地按第二級對索引進行排序:

In [27]: df.sort_index(level=1)
Out[27]:
                                Id  Strike  Expiration OptionType
OptionSymbol QuoteDatetime
YBWNA        2010-02-12     262202    95.0  2010-02-20       call
             2010-02-16     262454    95.0  2010-02-20       call
             2010-02-17     262707    95.0  2010-02-20       call
WWWAX        2012-04-12     262201    90.0  2010-02-20       call
             2012-04-16     262453    90.0  2010-02-20       call
             2012-04-17     262706    90.0  2010-02-20       call
XWNAX        2012-07-12     262201    90.0  2010-02-20       call
             2012-07-16     262453    90.0  2010-02-20       call
             2012-07-17     262706    90.0  2010-02-20       call
ZBYMZ        2013-09-02     234669   170.0  2011-01-22        put
             2013-09-03     234901   170.0  2011-01-22        put
             2013-09-04     235133   170.0  2011-01-22        put

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM