You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:31:42