簡體   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