python - 如果重复超过 n 次,则删除 Pandas 数据框中的连续重复项

标签 python pandas dataframe duplicates

构建问题/解决方案 here ,我正在尝试设置一个参数,如果相同的值连续出现 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。

最佳答案

让我们尝试对差异进行cumsum 来查找连续的 block 。然后groupby().transform('size')获取 block 的大小:

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

关于python - 如果重复超过 n 次,则删除 Pandas 数据框中的连续重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63182136/

相关文章:

python - Python中基于移动均值的异常值检测

c++ - 什么是 OSX 上 C++/Python 的良好初学者设置?

python - 如何在图的顶部绘制 x 轴?

python - 获取错误 : Object of type User is not JSON serializable in django python

python - 如何通过广播将numpy数组与 Pandas 数据帧相乘

python - 从 numpy 数组中删除 pandas 中的特定行

python - 工作日的 Pandas 石斑鱼?

python - Pandas Dataframe 按时间序列进行透视和重新索引

python - Pandas - 从分类列创建 bool 列

python 错误: too many indices for array