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

Pandas如何将连续出现少于4个的1对应行全部置为0

问题描述

现有如下DataFrame:

df = pd.DataFrame({"col":[0,0,1,1,1,1,0,0,1,1,0,0,1,1,1,0,1,1,1,1,0,0,0]})

需求:将列中连续出现的1的数量少于4的所有对应行的值设置为0,预期结果如下:

df = pd.DataFrame({"col":[0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0]})
实现方法

用pandas向量化操作即可简洁实现,不需要额外写循环:

# 给每个连续相同值的块分配唯一分组ID
grouper = df['col'].ne(df['col'].shift()).cumsum()
# 仅保留连续长度≥4的1块,其余值设为0
df['col'] = df['col'].where(df.groupby(grouper)['col'].transform('count') >= 4, 0)

代码说明

  • 第一行通过对比当前行与上一行的值是否不同,累加生成连续块的分组标签,相同连续值的行会被分到同一个组
  • 第二行按分组统计每个连续块的长度,仅保留长度≥4的块的原值,其余位置全部置为0,自动过滤掉所有长度不足4的连续1块

运行后得到的结果和预期完全一致,代码逻辑清晰,性能优于循环遍历的实现方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:36:04