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

如何用Pandas为连续空值及后续非空值分配唯一标识?

解决方案:Pandas序列按空值块分组计数

要实现将连续空值块及后续非空值归为同一组的需求,你可以通过标记空值块的起始位置,再累计计数的方式实现,具体代码如下:

import pandas as pd
import numpy as np

# 创建测试序列
col = pd.Series([1, 2, np.nan, np.nan, 3, 4, np.nan, np.nan, 5])

# 1. 标记每个位置是否是连续空值块的第一个元素
is_nan = col.isnull()
# 当前是NaN且前一个不是NaN(第一个元素若为NaN则直接标记)
is_new_empty_block = is_nan & ~is_nan.shift(1, fill_value=False)

# 2. 对标记累计求和,得到分组标识
group_ids = is_new_empty_block.cumsum()

print(group_ids.tolist())

输出结果

[0, 0, 1, 1, 1, 1, 2, 2, 2]

逻辑说明

  • is_nan:生成布尔序列,标记每个位置是否为空值
  • is_new_empty_block:仅在连续空值块的第一个元素位置标记为True,其余为False,确保每个连续空值块只触发一次计数
  • cumsum():对标记序列累计求和,自动为每个空值块及后续非空值分配同一递增组ID

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 17:07:27