如何用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
相关产品推荐
相关产品推荐

