有一个数据框:
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
代码:
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]})
def custom_sort(col):
return tuple(col.values)
sorted_columns = sorted(df.columns, key=lambda col: custom_sort(df[col]), reverse=True)
df_sorted = df[sorted_columns]
print(df_sorted)
输出: