Pandas 根据行号重新排列DataFrame的列

Pandas 根据行号重新排列DataFrame的列

问题描述

有一个DataFrame:

import pandas as pd
df = pd.DataFrame(data = {'a':[3,0,2,1],'b':[4,3,2,1],'c':[3,2,1,0],'d':[4,3,2,0]})
print(df)
>>> df
   a  b  c  d
0  3  4  3  4
1  0  3  2  3
2  2  2  1  2
3  1  1  0  0

如何根据每一列单元格中的数字分布重新排列(排序)整个df?例如,一列的内容是[3,2,1],那么它应该在其他元素是[3,2,0]的列之前排列。当比较两列时,按序比较每一行的数字。如果第一行相同,则比较下一行。

期望的结果如下:

>>> dd
   b  d  c  a
0  4  4  3  3
1  3  3  2  0
2  2  2  1  2
3  1  0  0  1

解决方案

对于一个高效的解决方案,不要重复发明轮子,直接使用sort_values

out = df.sort_values(by=list(df.index), axis=1, ascending=False)

或者最终numpy.lexsort

out = df.iloc[:, np.lexsort(-df[::-1].to_numpy())]

输出:

   b  d  c  a
0  4  4  3  3
1  3  3  2  0
2  2  2  1  2
3  1  0  0  1

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程