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

如何对DataFrame按行排序将每行最大值置于靠前列

问题根源

你写的代码有四个核心错误,根本跑不出预期结果:

  • 四层嵌套for循环是对四列数据做笛卡尔积全组合遍历,完全不是按行取同一行的四个数值
  • Python列表默认sort()是升序排列,就算遍历逻辑正确,lista[0]取到的是最小值,不是你要的最大值
  • 循环内每次对整列df["AREA_Mayor"]、df["AREA_Menor"]赋值,最终所有行的结果都会是最后一次循环计算的值,不可能和原行一一对应
  • 完全没处理NaN值的排序逻辑,很容易出现空值排在数值前面的问题
正确实现方案

pandas自带逐行处理接口,不用手写循环,效率高还能自动兼容NaN值,代码如下:

# 逐行做降序排序,NaN统一放到行末尾
sorted_row = Exapand_re_metrs.apply(
    lambda x: x.sort_values(ascending=False, na_position="last"),
    axis=1
)

# 取排序后的前两列,就是每行的最大值、次大值,直接赋值到原df对应列即可
df["AREA_Mayor"] = sorted_row.iloc[:, 0]
df["AREA_Menor"] = sorted_row.iloc[:, 1]

# 如果需要保留四列排序后的完整结果,直接重命名列即可
# sorted_row.columns = ["AREA_Mayor", "AREA_Menor", "AREA_3rd", "AREA_4th"]

参数说明

  • axis=1:指定按行维度执行函数,保证每次处理的是同一行的四个数值
  • ascending=False:指定降序排列,数值从大到小排,最大值自然落在每行最左侧
  • na_position="last":把所有NaN值统一放到每行排序结果的最末尾,不会挤占有效数值的位置

内容的提问来源于stack exchange,提问作者A6UD3L01196

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 05:39:21