排序数据透视表(多索引)

时间:2017-07-25 10:20:52

标签: python-3.x pandas sorting numpy pivot-table

我尝试在放置两个"行标签"后按降序对数据透视表的值进行排序。 (Excel术语)在枢轴上。

示例数据:

x = pd.DataFrame({'col1':['a','a','b','c','c', 'a','b','c', 'a','b','c'],
                  'col2':[  1,  1,  1,  1,  1,   2,  2,  2,   3,  3,  3],
                  'col3':[  1,.67,0.5,  2,.65, .75,2.25,2.5, .5,  2,2.75]})
print(x)
   col1  col2  col3
0     a     1  1.00
1     a     1  0.67
2     b     1  0.50
3     c     1  2.00
4     c     1  0.65
5     a     2  0.75
6     b     2  2.25
7     c     2  2.50
8     a     3  0.50
9     b     3  2.00
10    c     3  2.75

要创建枢轴,请使用以下功能:

pt = pd.pivot_table(x, index = ['col1', 'col2'], values = 'col3', aggfunc = np.sum)
print(pt)
           col3
col1 col2      
a    1     1.67
     2     0.75
     3     0.50
b    1     0.50
     2     2.25
     3     2.00
c    1     2.65
     2     2.50
     3     2.75

简而言之,此变量pt首先按col1排序,然后按col2col1的值排序,然后按col3排除col3。这很好,但我希望按col2(值)进行排序,同时保留在col3中分组的组(此列可以是任何顺序并且可以随机排列)。

目标输出看起来像这样(col2按降序排列,而col1中的任何订单都与 col3 col1 col2 a 1 1.67 2 0.75 3 0.50 b 2 2.25 3 2.00 1 0.50 c 3 2.75 1 2.65 2 2.50 组相同:

    pt.sort_values(by = 'col3', ascending = False)

我已经尝试了下面的代码,但这只是对整个数据透视表值进行排序并丢失了分组(我正在寻找组内的排序)。

ValueError: all keys need to be the same shape

对于指导,这里提出(并回答)类似的问题,但我无法使用提供的输出获得成功的输出:

Pandas: Sort pivot table

我从该答案得到的错误是{{1}}

1 个答案:

答案 0 :(得分:2)

DataFrame需要reset_indexcol1col3需要sort_valuesMultiIndex需要set_index:< / p>

df = df.reset_index()
       .sort_values(['col1','col3'], ascending=[True, False])
       .set_index(['col1','col2'])

print (df)
           col3
col1 col2      
a    1     1.67
     2     0.75
     3     0.50
b    2     2.25
     3     2.00
     1     0.50
c    3     2.75
     1     2.65
     2     2.50
相关问题