在pivot_table后对MultiIndex列进行排序。

问题描述 投票:0回答:1

我有以下数据框。

df = pd.DataFrame({'mean':np.arange(0,12),
                   'lo':np.arange(12,24),
                   'hi':np.arange(24,36),
                   'prop':['prop1']*6+['prop2']*6,
                   'group':['group1','group2','group3']*4,
                   'type':['type1','type2']*6})'effect_size'
df.head()

输出。

  mean  lo  hi  prop    group   type
0   0   12  24  prop1   group1  type1
1   1   13  25  prop1   group2  type2
2   2   14  26  prop1   group3  type1
3   3   15  27  prop1   group1  type2
4   4   16  28  prop1   group2  type1

我想对表进行数据透视,使产生的表有这些列(所需输出):

      type1                                type2
      group1       group2      group3      group1      group2      group3
      mean  lo  hi mean lo  hi mean lo  hi mean lo  hi mean lo  hi mean lo  hi
prop1   0   12  24  4   16  28  2   14  26  3   15  27  1   13  25  5   17  29
prop2   6   18  30  10  22  34  8   20  32  9   21  33  7   19  31  11  23  35

我试过用 pivot() (由于索引值重复,无法使用),以及 pivot_table():

df2 = df.pivot_table(index='prop',columns=['group','type'], values=['mean','lo','hi'])
df2

输出。

    hi  lo  mean
group   group1  group2  group3  group1  group2  group3  group1  group2  group3
type    type1   type2   type1   type2   type1   type2   type1   type2   type1   type2   type1   type2   type1   type2   type1   type2   type1   type2
prop                                                                        
prop1   24  27  28  25  26  29  12  15  16  13  14  17  0   3   4   1   2   5
prop2   30  33  34  31  32  35  18  21  22  19  20  23  6   9   10  7   8   11

结果是我想要的,只是各栏的顺序不正确,难以阅读。我怎样才能重新排列 df2 以获得我想要的输出?

我已经尝试过 reindex() 的MultiIndex索引,但我最终得到的是一个充满NaNs的表。

pandas pivot multi-index
1个回答
1
投票

pandas pivoting表总是对索引和列名进行排序。如果你想得到你想要的输出,你需要对输出进行后处理。

使用 swaplevel, sort_indexreindex 的输出 pivot_table

df3 = (df2.swaplevel(0,2, axis=1).sort_index(1)
                                 .reindex(['mean','lo','hi'], level=2, axis=1))

Out[107]:
type   type1                                        type2                     \
group group1         group2         group3         group1         group2
        mean  lo  hi   mean  lo  hi   mean  lo  hi   mean  lo  hi   mean  lo
prop
prop1      0  12  24      4  16  28      2  14  26      3  15  27      1  13
prop2      6  18  30     10  22  34      8  20  32      9  21  33      7  19

type
group     group3
       hi   mean  lo  hi
prop
prop1  25      5  17  29
prop2  31     11  23  35
© www.soinside.com 2019 - 2024. All rights reserved.