我有这个数据帧:
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)
我想知道是否有一种更优雅的方式来排序列MultiIndex,如下代码:
# 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_index,但无法在MultiIndex上下文中使用它(对于行和列(。
您可以在两个级别上使用排序索引:
out = df.sort_index(level=[0,1],axis=1,ascending=[True, False])
我可以使用
axis=1
因此最后一行变成
df = df.sort_values(axis = 1, by = ["C", "D"], ascending = [True, False])