我有一些数据.

当一个ID有4个连续的数字时,我想保留行.例如,如果ID 1具有行100、101、102、103、105,则应排除"105".

数据:

    ID    X
0    1  100
1    1  101
2    1  102
3    1  103
4    1  105
5    2  100
6    2  102
7    2  103
8    2  104
9    3  100
10   3  101
11   3  102
12   3  103
13   3  106
14   3  107
15   3  108
16   3  109
17   3  110
18   3  112
19   4  100
20   4  102
21   4  103
22   4  104
23   4  105
24   4  107

预期结果:

    ID    X
0    1  100
1    1  101
2    1  102
3    1  103
4    3  100
5    3  101
6    3  102
7    3  103
8    3  106
9    3  107
10   3  108
11   3  109
12   3  110
13   4  102
14   4  103
15   4  104
16   4  105

推荐答案

您可以识别连续值,然后使用groupby.filter按大小过滤组:

# group consecutive X
g = df['X'].diff().gt(1).cumsum() # no need to group here, we'll group later

# filter groups
out = df.groupby(['ID', g]).filter(lambda g: len(g)>=4)#.reset_index(drop=True)

输出:

    ID    X
0    1  100
1    1  101
2    1  102
3    1  103
9    3  100
10   3  101
11   3  102
12   3  103
13   3  106
14   3  107
15   3  108
16   3  109
17   3  110
20   4  102
21   4  103
22   4  104
23   4  105

Python相关问答推荐

韦尔福德方差与Numpy方差不同

Matlab中是否有Python的f-字符串等效物

比较2 PD.数组的令人惊讶的结果

使用索引列表列表对列进行切片并获取行方向的向量长度

有症状地 destruct 了Python中的regex?

Stacked bar chart from billrame

如何在Polars中从列表中的所有 struct 中 Select 字段?

合并帧,但不按合并键排序

Pandas Data Wrangling/Dataframe Assignment

Geopandas未返回正确的缓冲区(单位:米)

如何获取Python synsets列表的第一个内容?

如何求相邻对序列中元素 Select 的最小代价

如何在信号的FFT中获得正确的频率幅值

Django在一个不是ForeignKey的字段上加入'

Pandas:将值从一列移动到适当的列

分解polars DataFrame列而不重复其他列值

Matplotlib中的曲线箭头样式

大Pandas 中的群体交叉融合

GEKKO中若干参数的线性插值动态优化

Parsel无法访问嵌套元素