Вот кое-что для начала.
Сначала отфильтруйте все значения, которые соответствуют критериям (например, ниже 2):
df = pd.DataFrame({'speed':[2,1,4,5,4,1,1,1,3,4,5,6], 'time':[4,5,6,7,8,9,10,11,12,13,14,15]})
df_below2 = df[df['speed']<=2].reset_index(drop=True)
Теперь нам нужно разделить кадр если есть слишком большой разрыв между значениями во времени. Например:
threshold = 2
df_below2['not_continuous'] = df_below2['time'].diff() > threshold
Distin guish между группами с использованием cums:
df_below2['group_id'] = df_below2['not_continuous'].cumsum()
Отсюда должно быть легко разделить кадр на основе идентификатора группы.