python - 使用 sort_values() 独立地对 pandas DataFrame 的所有列进行排序

标签 python pandas

我有一个数据框,想按降序或升序对所有列进行独立排序。

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

如果我使用 this 中的解决方案,我可以获得所需的结果应用 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 函数的情况下以 pandas 方式对数据框中的所有列进行排序?

最佳答案

您可以使用 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

关于python - 使用 sort_values() 独立地对 pandas DataFrame 的所有列进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43280322/

相关文章:

python - 如何从 range() 函数中获取最后一个数字?

python - 加载MLFlow模型时如何加载私有(private)python包?

python - 如何使用 DBSCAN 找到集群成员之间的最大/最小距离?

python - 如果所有值都在同一列中,如何从 csv 文件读取数据?

python - Pandas 数据帧 : How to do Set Union Aggregation over a rolling window

python - 如何将 Polars DataFrame 转换为 pySpark DataFrame?

python - 按长度对列表列表进行排序时跟踪原始索引

python - 如何在 ubuntu 上为 python ML 安装软件包?

python - 以像素为单位指定 Tkinter 文本框的尺寸

python-3.x - 为 Pandas 中的每个组填充缺失的日期和回填值