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

Pandas逐行查找首个负数所在列位置+1的高效实现方案

高效实现方案

1. 最优向量化方案(性能最好)

全程用pandas内置向量化操作,无显式循环,数据量越大性能优势越明显,比你当前的apply实现快几十到上百倍:

import pandas as pd

# 示例DataFrame
df = pd.DataFrame({'a': [12, 34, -45], 'b':[-24, 36, 48], 'c':[28, -14, 68]})

# 核心逻辑:先判断所有值是否小于0,再取每行第一个符合条件的索引+1
df['first_neg_col'] = df.lt(0).to_numpy().argmax(axis=1) + 1

如果需要处理某行全为正数的边界情况(避免argmax错误返回第一个索引),可以增加掩码判断:

neg_mask = df.lt(0)
df['first_neg_col'] = neg_mask.to_numpy().argmax(axis=1) + 1
# 全正的行赋值为自定义默认值,这里用pd.NA举例
df.loc[~neg_mask.any(axis=1), 'first_neg_col'] = pd.NA

2. 列表推导式优化方案

如果你偏好轻量写法,列表推导式的性能也远高于apply实现:

df['first_neg_col'] = [next((i+1 for i, val in enumerate(row) if val < 0), pd.NA) for row in df.values]

小提示

你原来的实现里存在笔误,apply调用的first_negbal和你定义的函数名first_negval不一致,运行会报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 05:57:03