如何根据多行中的值对数据框的列进行排序?

时间:2016-01-09 02:44:21

标签: python pandas

例如,

df = pd.DataFrame({'x':[1,1,1,2,3,3], 'y':['a','a','c','b','b','b']})
ct = pd.crosstab(df.x, df.y)
ct
y  a  b  c
x         
1  2  0  1
2  0  1  0
3  0  2  0

如何根据row1,row2和row3中的值(按优先级顺序)对ct列进行排序?

我已尝试过以下操作,但两者均无效

ct.sort_values([1, 2, 3], axis=1)
ct.sort_values(['1','2','3'], axis=1)

2 个答案:

答案 0 :(得分:2)

目前无法通过直接调用sort_values来完成此操作。关于它有an open bug report

你仍然可以通过转置,按列排序,然后再转置来做得不太好:

>>> ct.T.sort_values([1, 2, 3]).T
y  b  c  a
x         
1  0  1  2
2  1  0  0
3  2  0  0

答案 1 :(得分:0)

这应按照> b> c:

的顺序对它们进行排序
df = pd.DataFrame({'x':[1,1,1,2,3,3], 'y':['a','a','c','b','b','b']})
ct = pd.crosstab(df.x, df.y)

y  a  b  c
x         
1  2  0  1
2  0  1  0
3  0  2  0

sorted_df = pd.DataFrame(ct.sort_values(by = ['a','b','c'], ascending = [False,False,False]))

y  a  b  c
x         
1  2  0  1
3  0  2  0
2  0  1  0