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

如何基于Pandas DataFrame现有列筛选大于0值排序生成新列

实现方案

你之前的代码问题是没有过滤小于等于0的数值就直接排序,调整后有两种实现方式可选:

1. 易读性优先(适合小数据量)

逐行筛选大于0的数值排序后补0,逻辑清晰易修改:

def process_row(row):
    # 提取当前行n_1~n_3中所有大于0的数
    valid_nums = [x for x in row if x > 0]
    # 从小到大排序后补0到3个元素
    valid_nums.sort()
    return valid_nums + [0] * (3 - len(valid_nums))

df[['new_1', 'new_2', 'new_3']] = df[['n_1', 'n_2', 'n_3']].apply(
    process_row, axis=1, result_type='expand'
)

2. 性能优先(适合10万行以上大数据量)

用numpy向量化操作避免行遍历,效率提升10倍以上:

import numpy as np

# 将小于等于0的数值替换为nan
n_arr = df[['n_1', 'n_2', 'n_3']].where(df[['n_1', 'n_2', 'n_3']] > 0).values
# 按行排序,nan会自动排在末尾
sorted_arr = np.sort(n_arr, axis=1)
# 将末尾的nan替换为0
df[['new_1', 'new_2', 'new_3']] = np.nan_to_num(sorted_arr, nan=0)

注:你提供的预期输出中存在两处笔误:143419025行的new_2应为2.63、143419030行原始n_1/n_3为0,正确输出new_1应为40、new_2/new_3为0,上述代码输出会匹配修正后的正确逻辑。

内容的提问来源于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.02 16:57:02