同时按行和列降序对 Dataframe 进行排序

Ale*_*lex 4 python sorting indexing dataframe pandas

目前有一个按系列排列的国家数据框,值范围为 0-25

我想对 df 进行排序,使最高值出现在左上角(第一个),而最低值出现在右下角(最后一个)。

        A   B   C   D  ...

USA     4   0   10  16
CHN     2   3   13  22
UK      2   1   8   14
...

Run Code Online (Sandbox Code Playgroud)

      D   C   A   B   ...

CHN   22  13  2   3
USA   16  10  4   0
UK    14  8   2   1

...
Run Code Online (Sandbox Code Playgroud)

在此,具有最高值的列现在位于第一个,索引也是如此。

我考虑过重新索引,但这会丢失“国家/地区”索引。

    D   C   A   B   ...

0   22  13  2   3
1   16  10  4   0
2   14  8   2   1
...
Run Code Online (Sandbox Code Playgroud)

我考虑过创建一个新的列和行,其中具有相应列/行的平均值或总和,但这是最有效的方法吗?

在获得新的行/列后,我将如何对 DF 进行排序?

有没有办法使用重新索引...

df_mv.reindex(df_mv.mean(or sum)().sort_values(ascending = False).index, axis=1)
Run Code Online (Sandbox Code Playgroud)

...这将允许我保留国家索引,并简单地进行相应的排序?

感谢您提供的任何建议或帮助。

编辑

预期结果按从最大到最小的顺序组织列和行。

对于预期输出中 A 列和 B 列的第一行,它们应该分别是 2、3。这是因为预期结果将 A 列解释为总和和均值都大于 B 列(即使总和或均值可以被视为行/列的“值”)。

我说较高的数字位于左上角,而较低的数字位于右下角,我只是说这是结果 df 的总体趋势。然而,列和行作为一个整体才是预期的焦点。对于造成的混乱,我深表歉意。

ans*_*sev 5

你可以使用:

rows_index=df.max(axis=1).sort_values(ascending=False).index
col_index=df.max().sort_values(ascending=False).index
new_df=df.loc[rows_index,col_index]
print(new_df)

      D   C  A  B
CHN  22  13  2  3
USA  16  10  4  0
UK   14   8  2  1
Run Code Online (Sandbox Code Playgroud)