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

Pandas实现列中连续1之间符合阈值要求的间隔0替换方法

实现方案

核心思路是先对列A的连续值做分组,标记出所有连续0的区间,再校验区间前后的连续1长度是否符合要求,满足条件的0区间直接替换为1即可,完整实现代码如下:

import pandas as pd

# 初始化数据
df = pd.DataFrame({'A': [1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0,
                         0, 0, 0, 0, 0, 0, 1, 1]})
n = 8
max_gap = 4

# 生成连续值分组ID
df['group_id'] = df['A'].diff().ne(0).cumsum()
# 计算每个分组的数值、长度
group_info = df.groupby('group_id')['A'].agg(val='first', cnt='count').reset_index()

# 初始化Fill_Gap列为原A列的值
df['Fill_Gap'] = df['A'].copy()

# 遍历所有0值分组,校验前后1分组是否符合条件
for i in range(1, len(group_info)-1):
    curr_group = group_info.iloc[i]
    prev_group = group_info.iloc[i-1]
    next_group = group_info.iloc[i+1]
    # 仅处理0值的中间分组
    if curr_group['val'] == 0 and prev_group['val'] == 1 and next_group['val'] == 1:
        # 校验前后1长度≥n,且当前0长度≤max_gap
        if prev_group['cnt'] >=n and next_group['cnt'] >=n and curr_group['cnt'] <= max_gap:
            # 替换对应位置的Fill_Gap为1
            df.loc[df['group_id'] == curr_group['group_id'], 'Fill_Gap'] = 1

# 可选:删除辅助用的group_id列
df.drop('group_id', axis=1, inplace=True)

运行后得到的Fill_Gap列和你给出的预期输出完全一致,仅索引13-16的4个0会被替换为1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:54:04