python - How can I rearrange the index level with Pandas? -


the purpose of post try understand how best manipulate dataframes multilevels.

create dataframe

import numpy np dates = pd.date_range('20130101', periods=6) df = pd.dataframe(np.random.randn(6,4), index=dates, columns=list('wxyz')) df['portfolio']= list('abcdef')  df 

dataframe

            y           z   portfolio 01/01/2013  1           2   02/01/2013  3           4   b 03/01/2013  5           6   c 04/01/2013  7           8   d 05/01/2013  9           10  e 06/01/2013  11          12  f 

pivot dataframe

dfs_pivot = df.pivot(columns='portfolio')  dfs_pivot 

pivoted dateframe

              y                         z   portfolio       b   c   d   e   f       b   c   d   e    f  2013-01-01    1   nan nan nan nan nan   2   nan nan nan nan nan  2013-01-02    nan 3   nan nan nan nan   nan 4   nan nan nan nan  2013-01-03    nan nan 5   nan nan nan   nan nan 6   nan nan nan  2013-01-04    nan nan nan 7   nan nan   nan nan nan 8   nan nan  2013-01-05    nan nan nan nan 9   nan   nan nan nan nan 10  nan  2013-01-06    nan nan nan nan nan 11    nan nan nan nan nan 12  

how can levels switched give?

portfolio             b       c       d       e        f                y   z   y   z   y   z   y   z   y   z    y   z     2013-01-01    1   2   nan nan nan nan nan nan nan nan nan nan   2013-01-02    nan nan 3   4   nan nan nan nan nan nan nan nan   2013-01-03    nan nan nan nan 5   6   nan nan nan nan nan nan   2013-01-04    nan nan nan nan nan nan 7   8   nan nan nan nan 2013-01-05    nan nan nan nan nan nan nan nan 9   10  nan nan 2013-01-06    nan nan nan nan nan nan nan nan nan nan 11  12 

to swap order of multiindex levels, use dataframe.swaplevel:

import numpy np import pandas pd dates = pd.date_range('20130101', periods=6) df = pd.dataframe(np.random.randint(10, size=(6,2)), index=dates, columns=list('yz')) df['portfolio']= list('abcdef') dfs_pivot = df.pivot(columns='portfolio').swaplevel(0, 1, axis=1) 

yields

portfolio        b    c    d    e    f       b    c    d    e    f               y    y    y    y    y    y    z    z    z    z    z    z 2013-01-01  7.0  nan  nan  nan  nan  nan  9.0  nan  nan  nan  nan  nan 2013-01-02  nan  4.0  nan  nan  nan  nan  nan  3.0  nan  nan  nan  nan 2013-01-03  nan  nan  8.0  nan  nan  nan  nan  nan  2.0  nan  nan  nan 2013-01-04  nan  nan  nan  5.0  nan  nan  nan  nan  nan  7.0  nan  nan 2013-01-05  nan  nan  nan  nan  4.0  nan  nan  nan  nan  nan  7.0  nan 2013-01-06  nan  nan  nan  nan  nan  3.0  nan  nan  nan  nan  nan  9.0 

to sort columns call dataframe.sortlevel:

dfs_pivot = dfs_pivot.sortlevel(axis=1) 

yields

portfolio             b         c         d         e         f                    y    z    y    z    y    z    y    z    y    z    y    z 2013-01-01  7.0  9.0  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan 2013-01-02  nan  nan  4.0  3.0  nan  nan  nan  nan  nan  nan  nan  nan 2013-01-03  nan  nan  nan  nan  8.0  2.0  nan  nan  nan  nan  nan  nan 2013-01-04  nan  nan  nan  nan  nan  nan  5.0  7.0  nan  nan  nan  nan 2013-01-05  nan  nan  nan  nan  nan  nan  nan  nan  4.0  7.0  nan  nan 2013-01-06  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  3.0  9.0 

to rearrange columns in custom order, call reindex:

custom_order = [('e', 'z'), ('d', 'z'), ('c', 'z'), ('f', 'z'), ('f', 'y'), ('b', 'z'),                 ('c', 'y'), ('e', 'y'), ('a', 'z'), ('a', 'y'), ('b', 'y'), ('d', 'y')] dfs_pivot = dfs_pivot.reindex(columns=custom_order)  

or, more simply, use column-indexing syntax:

dfs_pivot = dfs_pivot[custom_order] 

which yields

portfolio     e    d    c    f         b    c    e            b    d               z    z    z    z    y    z    y    y    z    y    y    y 2013-01-01  nan  nan  nan  nan  nan  nan  nan  nan  9.0  7.0  nan  nan 2013-01-02  nan  nan  nan  nan  nan  3.0  nan  nan  nan  nan  4.0  nan 2013-01-03  nan  nan  2.0  nan  nan  nan  8.0  nan  nan  nan  nan  nan 2013-01-04  nan  7.0  nan  nan  nan  nan  nan  nan  nan  nan  nan  5.0 2013-01-05  7.0  nan  nan  nan  nan  nan  nan  4.0  nan  nan  nan  nan 2013-01-06  nan  nan  nan  9.0  3.0  nan  nan  nan  nan  nan  nan  nan 

Comments

Popular posts from this blog

Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12:test (default-test) on project.Error occurred in starting fork -

windows - Debug iNetMgr.exe unhandle exception System.Management.Automation.CmdletInvocationException -

configurationsection - activeMq-5.13.3 setup configurations for wildfly 10.0.0 -