首页 > 解决方案 > 如何在熊猫中将列索引转换为行索引?

问题描述

我有一个看起来像这样的熊猫数据框:

           A           B
Date       a   b   c   a    b   c 
20180101   1   1   1   365 365 365
20180102   2   2   2   364 364 364
...      ... ... ...  ...  ... ...
20181231 365 365 365    1    1   1

你可以看到我有一个多级列索引。但是,我想将其转换为以下格式:


                    a   b   c
Date     Catelog1
20180101        A   1   1   1
                B 365 365 365
20180102        A   2   2   2
                B 364 364 364 
...           ... ... ... ... 
20181231        A 365 365 365 
                B   1   1   1 

然而,这对我来说并不明显,我们如何实现这一点,此外,如果我在列轴上有两个以上的级别,我只想将一个保留在底部并在行轴上移动所有上述索引怎么办?

标签: pythonpandas

解决方案


设置

idx = pd.MultiIndex.from_product([list('AB'), list('abc')])
df = pd.DataFrame(0, columns=idx, index=list('pqrs'))

df
   A        B      
   a  b  c  a  b  c
p  0  0  0  0  0  0
q  0  0  0  0  0  0
r  0  0  0  0  0  0
s  0  0  0  0  0  0

使用swaplevelstack

df.swaplevel(0, 1, axis=1).stack()

     a  b  c
p A  0  0  0
  B  0  0  0
q A  0  0  0
  B  0  0  0
r A  0  0  0
  B  0  0  0
s A  0  0  0
  B  0  0  0

另一种选择是stack使用参数level=0

df.stack(level=0)

     a  b  c
p A  0  0  0
  B  0  0  0
q A  0  0  0
  B  0  0  0
r A  0  0  0
  B  0  0  0
s A  0  0  0
  B  0  0  0

推荐阅读