繁体   English   中英

将一级索引与列级交换(Pandas Multiindex Dataframe)

[英]Swap level-one from index with column level (Pandas Multiindex Dataframe)

我有一个多索引的 pandas.Dataframe,它是这样的:

          BAZ    PAL
Foo  Bar          
124   1    A     B
      2    C     D
134   1    E     F
      2    G     H

我需要以适当的方式将索引中的第一级与列交换。 我需要得到这样的结果:

         124 134
Coo Bar
BAZ 1    A   E
    2    C   G
PAL 1    B   F
    2    D   H

您需要取消堆叠现有的索引级别Foo ,堆叠所需的列 'Coo',然后重新排列索引级别。 交换索引级别后,您可能想要对其进行排序。 最后,您可能希望删除所有值 ( val ) 的列名。

df = (pd.DataFrame({'Foo': [124, 124, 134, 134] * 2, 
                    'Bar': [1, 2, 1, 2] * 2, 
                    'Coo': ['BAZ'] * 4 + ['PAL'] * 4, 
                    'val': list('ACEGBDFH')})
      .set_index(['Foo', 'Bar', 'Coo'])
      .unstack('Coo'))

>>> df
        val    
Coo     BAZ PAL
Foo Bar        
124 1     A   B
    2     C   D
134 1     E   F
    2     G   H

df = df.unstack('Foo').stack('Coo')
df.index = df.index.swaplevel(0, 1)

>>> df
        val    
Foo     124 134
Coo Bar        
BAZ 1     A   E
PAL 1     B   F
BAZ 2     C   G
PAL 2     D   H

df.sort_index(inplace=True)

>>> df
        val    
Foo     124 134
Coo Bar        
BAZ 1     A   E
    2     C   G
PAL 1     B   F
    2     D   H

df.columns = df.columns.droplevel()

>>> df
Foo     124 134
Coo Bar        
BAZ 1     A   E
    2     C   G
PAL 1     B   F
    2     D   H

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM