Мой подход заключается в создании дополнительного столбца с групповым счетчиком
df['groups'] = (df.index.to_series().diff().dt.seconds > 1).cumsum()
# sensor1 sensor2 sensor3 groups
# timestamp
# 2017-12-03 16:13:01 20 4465 156 0
# 2017-12-03 16:13:02 20 4466 158 0
# 2017-12-03 16:13:03 20 4466 158 0
# 2017-12-03 16:45:05 30 4468 178 1
# 2017-12-03 16:45:06 30 4468 178 1
# 2017-12-03 18:00:00 20 4141 89 2
# 2017-12-03 18:00:01 22 4321 90 2
# 2017-12-03 18:00:02 22 4321 90 2
, затем groupby
этого нового столбца:
for ct, data in df.groupby('groups'):
print(ct, data.drop(columns=['groups']))
# 0 sensor1 sensor2 sensor3
# timestamp
# 2017-12-03 16:13:01 20 4465 156
# 2017-12-03 16:13:02 20 4466 158
# 2017-12-03 16:13:03 20 4466 158
# 1 sensor1 sensor2 sensor3
# timestamp
# 2017-12-03 16:45:05 30 4468 178
# 2017-12-03 16:45:06 30 4468 178
# 2 sensor1 sensor2 sensor3
# timestamp
# 2017-12-03 18:00:00 20 4141 89
# 2017-12-03 18:00:01 22 4321 90
# 2017-12-03 18:00:02 22 4321 90