2016-11-28 114 views
3

如何基于索引列和非索引列对数据框中的值进行排序?使用python对基于索引和非索引列的表值进行排序

数据帧:

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和彩色)。我想根据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” 为一列工作无法识别。

回答

4

你想

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

enter image description here

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

+1

我发现这个超级危险:通过文档mergesort是唯一稳定的算法。默认情况下它是快速排序,所以很容易出错。 – Boud

+1

@Boud。那就对了。修复它。 – Psidom

+0

非常感谢你们。好的解决方案问题解决了。 – user27976