如何筛选具有大于指定连续整数计数的行



我有一个这样的数据帧:

Frame_Number Parts X Y
7      Y.     7. 9
7      G      :  :
8      Y      :  :
8      Y      :  :
8      Y      :  :
9      :      :  :
10
18
18
18
18
19
20
20
21
21
22
23
24
24
25
25
25
26
27
28
29
29
29
29
30
42
45
80
80
80
81
81
81
82
82
83
109
109
120
121
122
123
124
125
126
127
128
129
130
131
132
132
132
133
190
200
202
204
205
206
:
1000

我想选择此数据帧中至少有 25 个连续数字的子集。

例如 在我的数据集中有 [1,1,2,3,5,6,8,9,10..33,34,35,36,37,40,.65.1000]

因此,从 8 到 37,我们有连续的值和超过 25 个(不同的)数字。此外,从 40 到 65,我们说存在 25 个连续的数字。因此,我想选择这些行集,其中至少有 25 个或更多连续数据帧作为子集存在。

  1. 创建连续整数组:

您可以创建一个系列s,该系列采用非连续整数的累积计数。这意味着连续行在系列s中将具有相同的值,因为它们在连续整数的同一"组"中

  1. 计算组中的连续整数:

然后,您可以通过使用以下.groupby(s)计算每个组中连续整数的count来创建m

  1. 筛选具有连续值> n 的组:

按大于指定的任何值(在本例中为 25)m筛选df

<小时 />
df = df.sort_values('A').drop_duplicates(subset='A')
s = (df['A'] != df['A'].shift(1) + 1).cumsum()
m = df.groupby(s).transform('count')['A']
df = df[m>10]
df
Out[1]: 
A
7    18
11   19
12   20
15   21
16   22
17   23
18   24
20   25
23   26
24   27
25   28
26   29
30   30
44  120
45  121
46  122
47  123
48  124
49  125
50  126
51  127
52  128
53  129
54  130
55  131
56  132
59  133

保留复制人的另一种选择:

df = d2.copy()
s = ((df['A'] != df['A'].shift(1)) & (df['A'] != df['A'].shift(1) + 1)).cumsum()
m = df.groupby(s).transform('count')['A']
df = df[m>10]
df
Out[1]: 
A
7    18
8    18
9    18
10   18
11   19
12   20
13   20
14   21
15   21
16   22
17   23
18   24
19   24
20   25
21   25
22   25
23   26
24   27
25   28
26   29
27   29
28   29
29   29
30   30
44  120
45  121
46  122
47  123
48  124
49  125
50  126
51  127
52  128
53  129
54  130
55  131
56  132
57  132
58  132
59  133

最新更新