我将尝试在将两个“行标签”(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
进行排序,然后在col1
中按照col2
的值进行排序,最后在所有这些值中按照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:所有键都需要具有相同的形状