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

如何过滤Pandas中连续n行数值不变的“平线”数据

过滤连续n行数值不变的数据点

需求:识别出连续至少n行数值相同的数据段,过滤掉该段内所有行,保留其余数据。以下以n=6为例实现:

示例数据

import pandas as pd
data={'col1':[1, 3, 3, 3, 3, 3, 3, 3, 3, 4, 1, 1, 1, 1, 1]}
df=pd.DataFrame(data,columns=['col1'])

实现代码

n = 6  # 连续行数阈值

# 生成连续相同值的分组键:每遇到与上一行不同的值,分组编号+1
group_key = df['col1'].ne(df['col1'].shift()).cumsum()
# 计算每个分组的长度,并映射到每一行
group_size = df.groupby(group_key)['col1'].transform('size')
# 生成过滤规则:分组长度小于n的保留(True),否则标记为待过滤(False)
flatline_filter = group_size < n

# 合并原数据与过滤列,查看标记结果
result = df.assign(flatline_filter=flatline_filter)
print(result)

输出结果

col1  flatline_filter
0      1             True
1      3            False
2      3            False
3      3            False
4      3            False
5      3            False
6      3            False
7      3            False
8      3            False
9      4             True
10     1             True
11     1             True
12     1             True
13     1             True
14     1             True

执行过滤

用生成的flatline_filter筛选DataFrame:

filtered_df = df[flatline_filter]
print(filtered_df)

逻辑说明

  1. df['col1'].ne(df['col1'].shift()):对比当前行与上一行的值,返回布尔值(不同为True,相同为False)
  2. cumsum():对布尔值累加,生成连续相同值的分组编号,确保连续相同值属于同一组
  3. transform('size'):将每个分组的总长度映射到组内每一行,让每行知道自己所在分组的规模
  4. 最终通过group_size < n判断:分组长度小于阈值的行保留,连续达到或超过n行的整段数据标记为待过滤

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 15:57:32