我對以下每個示例都有一個排序請求。在pandas的多索引級別內按列排序
我需要reset_index(),然後排序(),然後set_index()或是否有一個光滑的方式來做到這一點?
l = [[1,'A',99],[1,'B',102],[1,'C',105],[1,'D',97],[2,'A',19],[2,'B',14],[2,'C',10],[2,'D',17]]
df = pd.DataFrame(l,columns = ['idx1','idx2','col1'])
df.set_index(['idx1','idx2'],inplace=True)
# assume data has been received like this...
print df
col1
idx1 idx2
1 A 99
B 102
C 105
D 97
2 A 19
B 14
C 10
D 17
# I'd like to sort descending on col1, partitioning within index level = 'idx2'
col1
idx1 idx2
1 C 105
B 102
A 99
D 97
2 A 19
D 17
B 14
C 10
謝謝你的答案 注意我會稍有改變的數據:
l = [[1,'A',99],[1,'B',11],[1,'C',105],[1,'D',97],[2,'A',19],[2,'B',14],[2,'C',10],[2,'D',17]]
df = pd.DataFrame(l,columns = ['idx1','idx2','col1'])
df.set_index(['idx1','idx2'],inplace=True)
df = df.sort_index(by='col1', ascending=False)
但是輸出
idx1 idx2
1 C 105
A 99
D 97
2 A 19
D 17
B 14
1 B 11
2 C 10
我會希望它是
idx1 idx2
1 C 105
A 99
D 97
B 11
2 A 19
D 17
B 14
C 10
這個問題的編輯實際上是非常混亂的,部分B/C的答案使用頂部DF和不是底部DF。現在可能已經太晚了,但是頂部df應該已經被刪除了,所以每個人都會知道使用底部df。 – JohnE 2017-07-12 12:49:54