构建问题/解决方案 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/