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

如何在start与finish字符串之间的NaN填充指定值check

解决方案:填充指定区间内的NaN值

问题说明

需要将数据中位于start和finish字符串之间的nan值替换为check,区间外的nan保持不变。ffill()或interpolate()这类方法会持续填充后续值,无法满足仅填充指定区间的需求。

原始数据

start_finish
start
nan
nan
finish
nan
nan
start
nan
nan
start
nan
finish

预期结果

start_finish
start
check
check
finish
nan
nan
start
nan
nan
start
check
finish

代码实现

方法1:遍历标记(逻辑直观)

适合小数据集,逻辑清晰易懂:

import pandas as pd

# 构造原始数据(若实际为pd.NA/np.nan,替换对应值即可)
data = {
    'start_finish': [
        'start', 'nan', 'nan', 'finish', 'nan', 'nan',
        'start', 'nan', 'nan', 'start', 'nan', 'finish'
    ]
}
df = pd.DataFrame(data)

# 标记需要填充的位置
in_interval = False
fill_mask = []

for val in df['start_finish']:
    if val == 'start':
        in_interval = True
        fill_mask.append(False)
    elif val == 'finish':
        in_interval = False
        fill_mask.append(False)
    elif in_interval and val == 'nan':
        fill_mask.append(True)
    else:
        fill_mask.append(False)

# 执行填充
df.loc[fill_mask, 'start_finish'] = 'check'

方法2:向量化处理(高效)

适合大数据集,利用pandas的向量化操作提升效率:

import pandas as pd

# 构造原始数据
data = {
    'start_finish': [
        'start', 'nan', 'nan', 'finish', 'nan', 'nan',
        'start', 'nan', 'nan', 'start', 'nan', 'finish'
    ]
}
df = pd.DataFrame(data)

# 标记start和finish的位置
start_mask = df['start_finish'] == 'start'
finish_mask = df['start_finish'] == 'finish'

# 生成区间分组标识
group = start_mask.cumsum()
# 筛选出需要填充的位置:在有效区间内、不是finish、且值为nan
fill_mask = (group > 0) & ~finish_mask.cumsum().eq(group) & (df['start_finish'] == 'nan')

# 执行填充
df.loc[fill_mask, 'start_finish'] = 'check'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 15:45:12