我有一个这样的数据帧:
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 个或更多连续数据帧作为子集存在。
- 创建连续整数组:
您可以创建一个系列s
,该系列采用非连续整数的累积计数。这意味着连续行在系列s
中将具有相同的值,因为它们在连续整数的同一"组"中
- 计算组中的连续整数:
然后,您可以通过使用以下.groupby(s)
计算每个组中连续整数的count
来创建m
- 筛选具有连续值> 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