pandas 如何使用给定列中的值对MultiIndex进行排序

ajsxfq5m  于 2022-11-27  发布在  其他
关注(0)|答案(1)|浏览(118)

我有一个DataFrame,它有2级索引和一列数值。我想按level-0level-1索引对其进行排序,这样0级索引的顺序由Value列的值之和(降序)确定,1级索引的顺序也由Value列的值确定。这是我的代码:

import pandas as pd

df = pd.DataFrame()
df["Index1"] = ["A", "A", "B", "B", "C", "C"]
df["Index2"] = ["X", "Y", "X", "Y", "X", "Y"]
df["Value"] = [1, 4, 7, 3, 2, 7]
df = df.set_index(["Index1", "Index2"])
df

这就是期望的输出(B在顶部,因为和是10,然后我们首先得到X,因为7〉3):

qlzsbp2j

qlzsbp2j1#

您可以使用pandas.DataFrame.sort_values执行此操作:

out= (
        df
         .assign(temp_col = df.groupby(level=0).transform("sum"))
         .sort_values(by=["temp_col", "Value"], ascending=[False, False])
         .drop(columns="temp_col")
     )
#输出:
print(out)

               Value
Index1 Index2       
B      X           7
       Y           3
C      Y           7
       X           2
A      Y           4
       X           1

相关问题