使用python基于索引和非索引列对表值进行排序

时间:2016-11-28 21:26:17

标签: python pandas

如何根据索引和非索引列对数据框中的值进行排序?

数据帧:

ID  Colour  A   B   C
45356   Green   1   34  4
34455   Yellow  23  0   1
53443   Brown   3   4   3
45555   Green   5   5   2

表有两个索引列(ID和Color)。我想基于ID(升序),A(降序)和C(升序)对表进行排序。

必需的输出是:

ID  Colour  A   B   C
34455   Yellow  23  0   1
45356   Green   1   34  4
45555   Green   5   5   2
53443   Brown   3   4   3

我试过这个:

df.set_index(inplace=True)
df.sort_values(['ID', 'A', 'C'], ascending=['True','False','True'])

由于无法识别列,因此无效“ID”。

2 个答案:

答案 0 :(得分:4)

你想要

df.reset_index().sort_values(
    ['ID', 'A', 'C'],
    ascending=['True','False','True']
).set_index(['ID', 'Colour'])

enter image description here

答案 1 :(得分:4)

您可以致电sort_values()对列AC进行排序,然后致电sort_index()对索引ID进行排序:

(df.sort_values(['A', 'C'], ascending=[False, True])
   .sort_index(level=0, sort_remaining=False, kind='mergesort'))

enter image description here