Pandas 熊猫:删除重复出现的连续值

Pandas 熊猫:删除重复出现的连续值,pandas,dataframe,Pandas,Dataframe,我有一个大约800000行的熊猫数据帧。某些列包含仅每小时更新一次的信息,对应于大约200行。由于它是人工工业分析的结果,因此可能偶尔会丢失一次,而之前的结果只是重复 但是,如果重复时间过长(例如,2000行),则该信息不再与预测最终输出相关。因此,我只想在顺序重复超过2000行阈值时丢弃数据 为了可视化数据帧,假设我希望避免连续重复5次。因此,从以下数据帧开始: Analy. Result A 0 105 # Sequential count: 1 1

我有一个大约800000行的熊猫数据帧。某些列包含仅每小时更新一次的信息,对应于大约200行。由于它是人工工业分析的结果,因此可能偶尔会丢失一次,而之前的结果只是重复

但是,如果重复时间过长(例如,2000行),则该信息不再与预测最终输出相关。因此,我只想在顺序重复超过2000行阈值时丢弃数据

为了可视化数据帧,假设我希望避免连续重复5次。因此,从以下数据帧开始:

     Analy. Result A
0               105   # Sequential count: 1
1               105   # Sequential count: 2
2               105   # Sequential count: 3 >> ok, don't drop any
3               97
4               105
5               97   # Sequential count: 1
6               97   # Sequential count: 2
7               97   # Sequential count: 3
8               97   # Sequential count: 4
9               97   # Sequential count: 5 
10              97   # Sequential count: 6 >> drop from here onwards
11              97 
12              97
13              97    
14              80    

我只想保留连续重复的前5次。在本例中,删除第10到13行

     Analy. Result A
0               105
1               105
2               105
3               97
4               105
5               97
6               97 
7               97 
8               97
9               97   
14              80    

我在这里看了一些问题,但它们不太适合这个问题,比如:

我正在考虑创建几个移位列并对它们进行比较,但是对于N=5的重复来说,这似乎是合理的,但对于数千范围内的N来说,这似乎也是一种非常缓慢且低效的方法


感谢您的时间和帮助

我建议您取连续行的差值。如果创建一列来检查此差值是零(
True
)还是非零(
False
),则可以采用累积和来获得每个重复值的组

然后,您可以枚举每个组内的读数,并对频繁出现的读数设置阈值

import pandas as pd
df = pd.DataFrame([105,105,105,97,105,97,97,97,97,97,97,97,97,97,80],columns = ['Analy. Result A'])

# Get a unique group for each set of consequetive readings
df['dup_group'] = (df.diff().fillna(1)!=0).cumsum()

# Enumerate each reading within each group (from 0)
df['dup_count'] = df.groupby('dup_group').apply(lambda x: pd.Series(range(x.shape[0]))).values

# Threshold so that only the first 5 readings within each group are considered
max_dup = 5
df = df[df['dup_count']<max_dup]
将熊猫作为pd导入
df=pd.数据帧([105105105,97105,97,97,97,97,97,97,97,97,97,97,80],列=['分析结果A'])
#为每组连续读数获取唯一的组
df['dup_group']=(df.diff().fillna(1)!=0.cumsum()
#枚举每个组内的每个读数(从0开始)
df['dup_count']=df.groupby('dup_group')。应用(lambda x:pd.系列(范围(x.shape[0]))。值
#阈值,以便只考虑每组中的前5个读数
最大重复次数=5

df=df[df['dup_count']非常感谢!我曾经考虑过使用
groupby
,但我立即放弃了这种可能性,因为我没有考虑为每个序列获得唯一的组。简单而聪明的解决方案:)正是我所需要的