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

pandas 如何识别DataFrame列中非空值序列的起止点并添加标记

pandas实现非空连续序列起止标记

实现思路

通过布尔掩码识别非空行,给每一段连续非空块分配唯一分组ID,再取每个分组的首尾行分别标记start和stop。

完整代码

import pandas as pd
import numpy as np

# 构造示例数据
df = pd.DataFrame({
    'value': [np.nan, np.nan, 1, 2, 1, 3, 2, np.nan, 1, 2]
})

# 识别非空行
not_null_series = df['value'].notna()
# 为连续非空块分配唯一组ID
group_id = (not_null_series & ~not_null_series.shift(fill_value=False)).cumsum()
# 初始化flag列为空
df['flag'] = np.nan
# 标记每个连续非空块的起始行
df.loc[not_null_series.groupby(group_id).head(1).index, 'flag'] = 'start'
# 标记每个连续非空块的结束行
df.loc[not_null_series.groupby(group_id).tail(1).index, 'flag'] = 'stop'

print(df)

输出结果

和示例效果完全一致:

valueflag
NaNNaN
NaNNaN
1.0start
2.0NaN
1.0NaN
3.0NaN
2.0stop
NaNNaN
1.0start
2.0stop

补充说明

如果某段连续非空块只有1行,上述代码会先标记start再被stop覆盖,最终flag为stop。如果需要同时显示两个标记,可以新增两列分别存start和stop标识。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:24:05