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 的总体趋势。然而,列和行作为一个整体才是预期的焦点。对于造成的混乱,我深表歉意。
你可以使用:
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)
| 归档时间: |
|
| 查看次数: |
1360 次 |
| 最近记录: |