Pandasunstacking-嵌套列的顺序

我有以下格式的数据框:

    a   b   c   v1  v2
0   a1  b1  c1  1   5
1   a2  b1  c1  2   6
2   a1  b2  c1  3   7
3   a2  b2  c1  4   8

我想要实现的是这种格式:

        b1      b2
        v1  v2  v1  v2
a   c   
a1  c1  1   3   5   7
a2  c1  2   4   6   8

因此,原始数据构造如下:

foo = pd.DataFrame({
    "a": ["a1", "a2", "a1", "a2"],
    "b": ["b1", "b1", "b2", "b2"],
    "c": ["c1", "c1", "c1", "c1"],
    "v1": [1,2,3,4],
    "v2": [5,6,7,8]
})

然后我试图

foo.set_index(["a", "b", "c"]).unstack("b")

然而,这导致


        v1      v2
        b1  b2  b1  b2
a   c               
a1  c1  1   3   5   7
a2  c1  2   4   6   8

随后,我的问题是如何使未堆叠的b列在值列的顶部而不是在它们下方对齐?

回答

您还可以使用pivot而不是使用set_indexunstackswaplevel

In [565]: foo.pivot(["a", "c"], columns='b').swaplevel(0,1, axis=1)
Out[565]: 
b     b1 b2 b1 b2
      v1 v1 v2 v2
a  c             
a1 c1  1  3  5  7
a2 c1  2  4  6  8

为了得到你的输出,你可以这样做:

In [2941]: foo.pivot(["a", "c"], columns='b').swaplevel(0,1, axis=1).sort_index(axis=1).rename_axis((None, None), axis=1)
Out[2941]: 
      b1    b2   
      v1 v2 v1 v2
a  c             
a1 c1  1  5  3  7
a2 c1  2  6  4  8


以上是Pandasunstacking-嵌套列的顺序的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>