如何在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
相关产品推荐
相关产品推荐

