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

Pandas如何从n_1~n_3列提取大于0值排序生成new_1~new_3列?

实现DataFrame行内正数值排序填充的正确方案

你原来的代码本身就有语法错误:axis=1的行遍历模式下,apply传入的lambda接收参数是整行的Series对象,不能直接定义a/b/c三个入参,也缺少必要的逗号分隔,逻辑也完全没实现筛选、排序、补0的需求,自然会报错。

正确实现逻辑

每行的处理规则:

  • 提取n_1、n_2、n_3三列的数值
  • 过滤掉所有小于等于0的值
  • 对剩余数值做升序排序
  • 不足3个的位置统一补0,返回长度固定为3的序列赋值给三个新列

可直接运行的代码

import pandas as pd

# 自定义行处理函数
def process_row(row):
    # 筛选正数值并升序排序
    positive_vals = sorted([val for val in row[['n_1', 'n_2', 'n_3']] if val > 0])
    # 补0至长度为3
    positive_vals += [0.0] * (3 - len(positive_vals))
    return pd.Series(positive_vals, index=['new_1', 'new_2', 'new_3'])

# 应用到原DataFrame
df[['new_1', 'new_2', 'new_3']] = df.apply(process_row, axis=1)

注:你给出的预期输出里有部分数值和输入示例不匹配(比如ID为143419025的行预期new_2出现了输入没有的13.78、ID为143419030的行输入n1、n3都是0,预期里出现了3.92、11.23,属于输入示例笔误,上述代码逻辑完全符合你描述的需求)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:27:00