pandas 查找非空值的起点和终点

ksw*_*01_ 5 python dataframe pandas

我想找到一列的起点和终点并对其进行标记,如下所示:

价值 旗帜
1 开始
2
1
3
2 停止
1 开始
2 停止

tdy*_*tdy 5

使用生成这些条件shift并使用分配loc

start = df.value.notnull() & df.value.shift().isnull()
stop = df.value.notnull() & df.value.shift(-1).isnull()

df.loc[start, 'flag'] = 'start'
df.loc[stop, 'flag'] = 'stop'

#    value   flag
# 0    NaN    NaN
# 1    NaN    NaN
# 2    1.0  start
# 3    2.0    NaN
# 4    1.0    NaN
# 5    3.0    NaN
# 6    2.0   stop
# 7    NaN    NaN
# 8    1.0  start
# 9    2.0   stop
Run Code Online (Sandbox Code Playgroud)

或者使用以下方式分配mask

df['flag'] = df['flag'].mask(start, 'start')
df['flag'] = df['flag'].mask(stop, 'stop')
Run Code Online (Sandbox Code Playgroud)