我有一个数据框,并希望按降序或升序对所有列进行独立排序。
import pandas as pd data = {'a': [5, 2, 3, 6], 'b': [7, 9, 1, 4], 'c': [1, 5, 4, 2]} df = pd.DataFrame.from_dict(data) a b c 0 5 7 1 1 2 9 5 2 3 1 4 3 6 4 2
当我为此使用sort_values()时,它无法按预期运行(对我而言),仅对一列进行排序:
foo = df.sort_values(by=['a', 'b', 'c'], ascending=[False, False, False]) a b c 3 6 4 2 0 5 7 1 2 3 1 4 1 2 9 5
如果我使用此答案中的应用lambda函数的解决方案,则可以获得期望的结果:
bar = df.apply(lambda x: x.sort_values().values) print(bar) a b c 0 2 1 1 1 3 4 2 2 5 7 4 3 6 9 5
但是,这对我来说似乎有些沉重。
上面的sort_values()示例中实际上发生了什么,如何在没有lambda函数的情况下以熊猫方式对数据框中的所有列进行排序?
您可以使用numpy.sort与DataFrame构造函数:
numpy.sort
DataFrame
df1 = pd.DataFrame(np.sort(df.values, axis=0), index=df.index, columns=df.columns) print (df1) a b c 0 2 1 1 1 3 4 2 2 5 7 4 3 6 9 5
编辑:
降序回答:
arr = df.values arr.sort(axis=0) arr = arr[::-1] print (arr) [[6 9 5] [5 7 4] [3 4 2] [2 1 1]] df1 = pd.DataFrame(arr, index=df.index, columns=df.columns) print (df1) a b c 0 6 9 5 1 5 7 4 2 3 4 2 3 2 1 1