2016-11-28 115 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