在 pandas 的多索引级别内按列排序 [英] Sort by column within multi index level in pandas
本文介绍了在 pandas 的多索引级别内按列排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在下面的每个示例中都有一个排序请求.
I have a sorting request per example below.
我需要reset_index(),然后sort()然后set_index(),还是有一种巧妙的方法呢?
Do i need to reset_index(), then sort() and then set_index() or is there a slick way to do this?
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
谢谢您的回答 请注意,我会略微更改数据:
Thank you for the answer Note I change the data slightly:
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
推荐答案
您可以使用sort_index
:
df.sort_index(by='col1', ascending=False)
这将输出:
col1
idx1 idx2
1 C 105
B 102
A 99
D 97
2 A 19
D 17
B 14
C 10
这篇关于在 pandas 的多索引级别内按列排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文