Pandas 高效列多索引排序

Pandas 高效列多索引排序,pandas,dataframe,sorting,multi-index,Pandas,Dataframe,Sorting,Multi Index,我有这个数据框: df = pandas.DataFrame({'A' : [2000, 2000, 2000, 2000, 2000, 2000], 'B' : ["A+", 'B+', "A+", "B+", "A+", "B+"], 'C' : ["M", "M&quo

我有这个数据框:

df = pandas.DataFrame({'A' : [2000, 2000, 2000, 2000, 2000, 2000], 
                       'B' : ["A+", 'B+', "A+", "B+", "A+", "B+"],
                       'C' : ["M", "M", "M", "F", "F", "F"],
                       'D' : [1, 5, 3, 4, 2, 6],
                       'Value' : [11, 12, 13, 14, 15, 16] }).set_index((['A', 'B', 'C', 'D']))

df = df.unstack(['C', 'D']).fillna(0)
我想知道是否有一种更优雅的方法可以对列进行多索引排序,它包含以下代码:

# rows ordering
df = df.sort_values(by = ['A', "B"], ascending = [True, True])
# col ordering
df = df.transpose().sort_values(by = ["C", "D"], ascending = [False, False]).transpose() 
特别是我觉得最后一行有两个转置,比它应该的复杂得多。我尝试使用sort_索引,但无法在多索引上下文中使用它(对于行和列)。

我可以使用

axis=1
因此,最后一行成为

df = df.sort_values(axis = 1, by = ["C", "D"], ascending = [True, False])
我可以用

axis=1
因此,最后一行成为

df = df.sort_values(axis = 1, by = ["C", "D"], ascending = [True, False])

您可以在两个级别上使用排序索引:

out = df.sort_index(level=[0,1],axis=1,ascending=[True, False])

您可以在两个级别上使用排序索引:

out = df.sort_index(level=[0,1],axis=1,ascending=[True, False])

df.sort\u索引(级别=[0,1],轴=1,升序=False)
?df.sort\u索引(级别=[0,1],轴=1,升序=[True,False])起作用。您可以将其发布为答案
df。排序索引(级别=[0,1],轴=1,升序=False)
?df.排序索引(级别=[0,1],轴=1,升序=[True,False])起作用。您可以将其发布为回答确实如此,但每个级别的过滤方式不同(一个上升,一个下降)@NielsouAkbrg感谢您的更正感谢ResolutionInded,但每个级别的过滤方式不同(一个上升,一个下降)@NielsouAkbrg感谢您的更正感谢ResolutionInded