Python:对DataFrame指定3列按行内从小到大排序
解决DataFrame指定列按行从小到大排序的问题
没问题,这个需求在pandas里很好实现,我给你两种实用的方法,你可以根据数据集大小和个人偏好选择:
方法一:用apply()逐行排序(直观易懂)
这种方法通过apply()对指定列的每一行应用sorted()函数,把排序后的结果展开回原列:
首先构造你的示例数据:
import pandas as pd # 构造输入DataFrame df = pd.DataFrame({ 'No': [1, 2, 3], 'MinVal': [2, 5, 8], 'MidVal': [4, 6, 8], 'MaxVal': [3, 8, 1] })
然后执行排序操作:
# 针对MinVal、MidVal、MaxVal三列,按行从小到大排序后覆盖原列 df[['MinVal', 'MidVal', 'MaxVal']] = df[['MinVal', 'MidVal', 'MaxVal']].apply( sorted, axis=1, result_type='expand' )
axis=1:指定按行处理数据result_type='expand':把每行排序后的列表展开成三列,刚好匹配原列的位置
方法二:用numpy.sort()(高性能优先)
如果你的数据集很大,numpy的排序方法效率会更高,它直接对底层数值数组进行排序:
import numpy as np # 对指定列的数值数组按行排序,然后赋值回原DataFrame df[['MinVal', 'MidVal', 'MaxVal']] = np.sort(df[['MinVal', 'MidVal', 'MaxVal']].values, axis=1)
验证结果
执行完上面任意一种方法后,打印df就能得到你想要的结果:
print(df)
输出:
No MinVal MidVal MaxVal 0 1 2 3 4 1 2 5 6 8 2 3 1 8 8
如果需要从大到小排序,只需要稍作修改:
- 方法一:把
sorted改成lambda x: sorted(x, reverse=True) - 方法二:在
np.sort后反转结果:np.sort(..., axis=1)[:, ::-1]
内容的提问来源于stack exchange,提问作者MaMo
相关产品推荐
相关产品推荐

