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

Python Pandas跨列连续非空值判断最快实现方法

高效实现方案

千万行数据规模下可秒级返回结果,核心代码如下:

import numpy as np
import pandas as pd

# 示例测试数据集
df = pd.DataFrame(
    np.array([[1, 1, 1, 1], [1, 1, np.nan, 1], [1, np.nan, 1, 1]]),
    columns=['t', 't_1', 't_2', 't_3']
)

# 核心计算逻辑
# 按行累计统计空值出现次数,只要当前位置及左侧出现过空值,就将当前位置置为空
cum_nan_flag = df.isna().cumsum(axis=1) > 0
df_result = df.mask(cum_nan_flag, np.nan)

执行后得到的df_result与需求给出的预期输出完全匹配。

性能优势原理
  • 原方案的核心性能瓶颈是逐行apply调用自定义Python函数:所有逻辑在Python解释器层面逐行循环执行,1000万行的循环调度开销极高;同时原方案对每一列的结果都单独调用一次apply,重复扫描数据集,存在大量冗余计算。
  • 新方案全程使用Pandas/Numpy内置向量化算子,性能提升可达2~3个数量级:
    • isna()、按行累计求和cumsum()、条件替换mask()三个操作全部是C语言层面实现的底层批量计算逻辑,完全跳过Python层的逐行循环开销,单指令即可完成整列/整表计算。
    • 全程仅对全量数据做3次顺序扫描,没有重复计算,内存访问效率和CPU利用率远高于逐行循环方案。
    • 方案自动适配列数量变化,后续新增t_4/t_5等列时不需要修改任何代码,扩展性更强。

注意:该实现严格依赖列顺序,必须保证列按t、t_1、t_2...从左到右的时间先后顺序排列,否则会出现计算错误。

内容的提问来源于stack exchange,提问作者Claudio Mariano Hurtado Sepulv

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:01:29