У меня есть датафрейм, который выглядит так:
value timestamp
18.832939 2019-03-04 12:37:26 UTC
18.832939 2019-03-04 12:38:26 UTC
18.832939 2019-03-04 12:39:27 UTC
18.955200 2019-03-04 12:40:28 UTC
18.784912 2019-03-04 12:44:32 UTC
18.784912 2019-03-04 12:45:33 UTC
20.713936 2019-03-04 17:59:36 UTC
20.871742 2019-03-04 18:08:31 UTC
20.871742 2019-03-04 18:09:32 UTC
20.873871 2019-03-04 18:10:32 UTC
Мне нужен следующий результат, где я идентифицирую все промежутки времени, которые больше 2 минут, но меньше 15 минут (2
value timestamp
18.832939 2019-03-04 12:37:26 UTC
18.832939 2019-03-04 12:38:26 UTC
18.832939 2019-03-04 12:39:27 UTC
18.955200 2019-03-04 12:40:28 UTC
NaN 2019-03-04 12:41:28 UTC
NaN 2019-03-04 12:42:28 UTC
NaN 2019-03-04 12:43:28 UTC
18.784912 2019-03-04 12:44:32 UTC
18.784912 2019-03-04 12:45:33 UTC
20.713936 2019-03-04 17:59:36 UTC
NaN 2019-03-04 18:00:36 UTC
NaN 2019-03-04 18:01:36 UTC
NaN 2019-03-04 18:02:36 UTC
NaN 2019-03-04 18:03:36 UTC
NaN 2019-03-04 18:04:36 UTC
NaN 2019-03-04 18:05:36 UTC
NaN 2019-03-04 18:06:36 UTC
NaN 2019-03-04 18:07:36 UTC
20.871742 2019-03-04 18:08:31 UTC
20.871742 2019-03-04 18:09:32 UTC
20.873871 2019-03-04 18:10:32 UTC
Это означает, что для достижения этой цели я должен сделать две вещи:
- Определите, где пробелы соответствуют условию, которое я хочу. Потому что у нас могут быть промежутки, которые превышают 15 минут, и я не заинтересован в них.
- После определения создайте новые строки с 1-минутным увеличением или просто равномерно распределите значения с помощью меток времени.
Я могу сделать 1-й с этим:
df['aux_1'] = ((df['timestamp'].diff() > '0 days 00:02:00') & (df['timestamp'].diff() < '0 days 00:15:00')).astype(int) #get ending of the gap.
df['aux_2'] = df['aux_1'].shift(-1) #beginning of the gap.
df['intervals'] = df['aux_1'] + df['aux_2'] #both beginning and end with numeric consecutive flags contained in a single column.
Но я не уверен, как сделать вторую часть, по крайней мере, не "как Панды". Было бы идеально как-то определить начало-конец интервала времени, который я намереваюсь заполнить, а затем применить asfreq ('1m') и использовать этот вектор для заполнения желаемых пробелов. Просто не знаю, как это сделать правильно.
Может кто-нибудь мне помочь? Заранее спасибо.