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

问题描述 投票: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]})
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
python pandas dataframe sorting
1个回答
0
投票

代码:

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)

输出:

© www.soinside.com 2019 - 2024. All rights reserved.