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)
输出结果
和示例效果完全一致:
| value | flag |
|---|---|
| NaN | NaN |
| NaN | NaN |
| 1.0 | start |
| 2.0 | NaN |
| 1.0 | NaN |
| 3.0 | NaN |
| 2.0 | stop |
| NaN | NaN |
| 1.0 | start |
| 2.0 | stop |
补充说明
如果某段连续非空块只有1行,上述代码会先标记start再被stop覆盖,最终flag为stop。如果需要同时显示两个标记,可以新增两列分别存start和stop标识。
内容的提问来源于stack exchange,提问作者kswizzle101_
相关产品推荐
相关产品推荐

