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

如何在Pandas DataFrame中保留间隔至少4行的1值?

解决保留间隔至少4行的1值问题

核心思路

我们需要确保每一个保留的1,和上一个被保留的1的索引差至少为4(对应间隔至少4行)。直接用diff()处理相邻1的间隔会误判连续或近邻的有效1(比如示例中索引4的1应该保留,但它和索引3的1相邻,diff()无法区分这种情况),因此直接追踪上一个保留的1的位置,逐个判断是否满足间隔要求是更可靠的方案。

实现代码

import pandas as pd

# 初始化示例数据
df = pd.DataFrame.from_dict({'ix':list(range(12)), 'in':[1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1]})

# 收集需要保留的1的索引
keep_indices = []
last_kept_idx = -float('inf')  # 初始化为负无穷,确保第一个1会被保留

# 遍历所有值为1的行索引
for idx in df[df['in'] == 1].index:
    # 检查当前索引与上一个保留索引的间隔是否≥4
    if idx - last_kept_idx >= 4:
        keep_indices.append(idx)
        last_kept_idx = idx

# 生成输出列
df['out'] = 0
df.loc[keep_indices, 'out'] = 1

print(df)

输出验证

运行后得到的out列与示例期望完全一致:

ix  in  out
0    0   1    1
1    1   0    0
2    2   0    0
3    3   1    0
4    4   1    1
5    5   0    0
6    6   1    0
7    7   0    0
8    8   1    1
9    9   0    0
10  10   0    0
11  11   1    0

逻辑说明

  1. 先筛选出所有值为1的行索引,避免遍历整个数据集提升效率;
  2. 用last_kept_idx记录上一个被保留的1的索引,初始值设为负无穷保证第一个1一定会被保留;
  3. 对每个1的索引,判断与上一个保留索引的差值是否≥4,满足则标记为保留并更新last_kept_idx;
  4. 最后将保留的索引对应的out列设为1,其余为0。

这个方法逻辑直观,容易根据需求调整间隔阈值(比如把4改成其他数值),同时不会出现diff()方法误删有效1的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 20:25:10