Вот как вы можете сделать это, используя цифровую трансляцию и цикл, пожалуйста, найдите описание в комментарии в коде
## dummy data
df = pd.DataFrame([['57342', '122877889', 25.524446], ['57343', '122878889', 25.527077], ['57344', '122879889', 26.582283], ['57345', '122880889', 27.59411], ['57346', '122881889', 28.612511], ['57347', '122882889', 28.517876], ['57348', '122883889', 29.521818], ['57349', '122884889', 29.517876], ['57350', '122885889', 32.473185], ['57351', '122886889', 32.483698]], columns=('col_0', 'col_1', 'col_3'))
## use numpy broadcast to find difference between each pair of numbers
## result will be matrix with each cell representing difference of pair
diff = np.abs(df["col_3"].values - df["col_3"].values[:, np.newaxis])
distance_gt2 = (diff>2).astype(int)
print(distance_gt2)
## loop though the matrix and find contigious block where difference is <= 2
j=1
segments=[]
for i in range(len(df)):
s = np.sum(distance_gt2[j:i,j:i])
## when is sum is greater that 0 that is next segment
if s>0:
segments.append(df[j-1:i-1])
j=i
segments.append(df[j-1:len(df)])
[print(segment) for segment in segments]
Обратите внимание на непрерывный блок нулей, которые указывают расстояние менее 2
## print(distance_gt2)
[[0 0 0 1 1 1 1 1 1 1]
[0 0 0 1 1 1 1 1 1 1]
[0 0 0 0 1 0 1 1 1 1]
[1 1 0 0 0 0 0 0 1 1]
[1 1 1 0 0 0 0 0 1 1]
[1 1 0 0 0 0 0 0 1 1]
[1 1 1 0 0 0 0 0 1 1]
[1 1 1 0 0 0 0 0 1 1]
[1 1 1 1 1 1 1 1 0 0]
[1 1 1 1 1 1 1 1 0 0]]
Результат
col_0 col_1 col_3
0 57342 122877889 25.524446
1 57343 122878889 25.527077
2 57344 122879889 26.582283
col_0 col_1 col_3
3 57345 122880889 27.594110
4 57346 122881889 28.612511
5 57347 122882889 28.517876
6 57348 122883889 29.521818
7 57349 122884889 29.517876
col_0 col_1 col_3
8 57350 122885889 32.473185
9 57351 122886889 32.483698