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

Pandas如何为DataFrame非NaN连续段生成逐段递增1的整数列

连续非NaN段递增编号实现方案

实现思路

全程采用pandas向量化运算,无Python层逐行遍历,适配百万级以上大数据量场景,核心逻辑分三步:

  • 先标记所有非NaN值的位置
  • 识别每一段连续非NaN值的起始点(当前位置非NaN、前一位置为NaN)
  • 对起始点标记做累计求和得到连续递增的段编号,再将原NaN位置的编号重置为NaN即可

完整实现代码

import pandas as pd
import numpy as np

# 原始示例数据
data = pd.DataFrame(
    [np.nan, np.nan, np.nan, 0.5, 1.2, 2.7, 3.8, np.nan, np.nan, 0.1, 0.7, 2.3, 
     np.nan, np.nan, np.nan, np.nan, np.nan, 0.01, 0.4, 1.5, 2.8, 4.5, 5.6, 
     np.nan, np.nan, np.nan, np.nan, np.nan, np.nan],
    columns=['origin_val']
)

# 核心计算逻辑
not_null_mask = data['origin_val'].notna()
# 标记每个连续非NaN段的起始位置
segment_start_flag = not_null_mask & not_null_mask.shift(fill_value=False)
# 累计求和生成递增ID,空值位置保留NaN
data['segment_id'] = segment_start_flag.cumsum().where(not_null_mask, np.nan)

效果验证

运行后segment_id列输出完全匹配需求:

索引0-2为NaN,索引3-6值为1,索引7-8为NaN,索引9-11值为2,索引12-16为NaN,索引17-22值为3,索引23-28为NaN。

  • 所有运算均走pandas底层C实现,无逐行循环开销,大数据量下性能表现优异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 02:24:16