首页 > 解决方案 > 如果重复超过 n 次,则删除 Pandas 数据框中的连续重复项

问题描述

在这里建立问题/解决方案,我正在尝试设置一个参数,如果相同的值连续出现 5 次(或更多)次,则该参数只会删除连续的重复项......

我可以在链接的帖子中应用解决方案,该解决方案.shift()用于检查前一个(或通过调整班次周期参数在过去或未来指定的值)是否等于当前值,但我如何调整它来检查几个同时连续的值?

假设一个看起来像这样的数据框:

x    y

1    2
2    2
3    3
4    3
5    3
6    3
7    3
8    4
9    4
10   4
11   4
12   2

我正在努力实现这一目标:

x    y

1    2
2    2
3    3
8    4
9    4
10   4
11   4
12   2

我们丢失了第 4、5、6、7 行,因为我们在 y 列中找到了五个连续的 3。但是保留第 1,2 行,因为我们只能在 y 列中找到两个连续的 2。同样,保留第 8、9、10、11 行,因为我们只在 y 列中找到四个连续的 4。

标签: pythonpandasdataframeduplicates

解决方案


让我们尝试cumsum差异以找到连续的块。然后groupby().transform('size')获取块的大小:

thresh = 5
s = df['y'].diff().ne(0).cumsum()

small_size = s.groupby(s).transform('size') < thresh
first_rows = ~s.duplicated()

df[small_size | first_rows]

输出:

     x  y
0    1  2
1    2  2
2    3  3
7    8  4
8    9  4
9   10  4
10  11  4
11  12  2

推荐阅读