大熊猫中的堆栈和交换级别

时间:2018-03-27 15:44:48

标签: python pandas

我有一个像

这样的pandas数据框
id   cat  v1  v2
36     A   1   2
36     B   3   4
36     C   5   6
97     A   7   8
97     B   9  10
97     C  11  12

我发现使用set_index()unstack()我得到了

df.set_index(['code', 'cat']).unstack()

       v1           v2
code   A   B   C    A    B    C
id
36     1   3   5    2    4    6
97     7   9  11    8   10   12

但我想要

       A            B           C
code   v1    v2     v1    v2    v1    v2
id
36     1     2      3     4     5     6
97     7     8      9     10    11    12

如何交换列轴中的水平?

2 个答案:

答案 0 :(得分:6)

您提到swaplevel

df.set_index(['id', 'cat']).unstack().swaplevel(0,1,axis=1).sort_index(axis=1)
Out[765]: 
cat  A     B       C    
    v1 v2 v1  v2  v1  v2
id                      
36   1  2  3   4   5   6
97   7  8  9  10  11  12

答案 1 :(得分:3)

您还可以转置和取消堆叠特定图层

df.set_index(['cat', 'id']).T.stack().unstack(0)

cat  A     B       C    
    v1 v2 v1  v2  v1  v2
id                      
36   1  2  3   4   5   6
97   7  8  9  10  11  12