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

如何在Pandas中识别连续重复5次及以上的静态值并提取对应索引与值

解决方法:找出DataFrame中连续重复5次及以上的行

嘿,我看你现在的代码完全没匹配上你的需求呀——你要找的是连续重复5次及以上的相同值对应的行,但当前代码是用来删除所有值都一致的列,这完全不是一回事儿!别担心,我来给你搞定这个问题。

核心思路

我们可以通过标记连续重复的数值分组,然后筛选出长度≥5的分组,就能精准定位到目标行。这里以你提供的Temperat列为例:

完整代码示例

import pandas as pd

# 先构造你的示例数据集
data = {
    'ID.': [23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],
    'Temperat': [30.147,29.523,32,32,32,32,32,32,32,32,32,32,32,32,32,29.638]
}
df = pd.DataFrame(data)

# 1. 标记连续重复的分组:当前值和前一行不同时,分组ID+1
df['group_id'] = (df['Temperat'] != df['Temperat'].shift()).cumsum()

# 2. 计算每个分组的行数,筛选出长度≥5的分组ID
group_sizes = df.groupby('group_id').size()
valid_groups = group_sizes[group_sizes >= 5].index

# 3. 过滤出符合条件的行,去掉临时的group_id列
result = df[df['group_id'].isin(valid_groups)].drop('group_id', axis=1)

# 输出结果
print(result)

运行这段代码后,你就能得到想要的输出:

ID.  Temperat
2    25      32.0
3    26      32.0
4    27      32.0
5    28      32.0
6    29      32.0
7    30      32.0
8    31      32.0
9    32      32.0
10   33      32.0
11   34      32.0
12   35      32.0
13   36      32.0
14   37      32.0

通用扩展说明

如果你的需求是针对多列分别找出各自连续重复≥5次的行,可以把上面的逻辑封装成函数,循环处理每一列:

def find_consecutive_duplicates(df, column, min_repeats=5):
    df['group_id'] = (df[column] != df[column].shift()).cumsum()
    group_sizes = df.groupby('group_id').size()
    valid_groups = group_sizes[group_sizes >= min_repeats].index
    return df[df['group_id'].isin(valid_groups)].drop('group_id', axis=1)

# 针对Temperat列调用
result = find_consecutive_duplicates(df, 'Temperat', 5)

为什么你的原代码不行?

你原来的代码df.apply(pd.Series.nunique)是计算每一列的唯一值数量,然后删除那些只有1个唯一值的列——这是用来清理完全没有变化的列,和“找连续重复的行”完全是两个不同的需求,所以解决不了你的问题哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 12:02:37