Прежде всего, мои извинения, если название было слишком двусмысленным.
У меня есть pd.DataFrame
с datetime64
в качестве индекса типа d.Эти индексы, однако, распределены неравномерно: в большинстве случаев они имеют интервал в одну минуту, но часто есть и другие интервалы, например две минуты.
Предположим, если у меня есть pd.DataFrame
:
df = pd.DataFrame({'date': ['2018-11-28 13:59:00', '2018-11-28 14:00:00',
'2018-11-28 14:01:00', '2018-11-28 14:02:00',
'2018-11-28 14:03:00', '2018-11-28 14:05:00',
'2018-11-28 14:06:00', '2018-11-28 14:07:00',
'2018-11-28 14:08:00', '2018-11-28 14:09:00'],
'count': np.random.randint(1, 100, 10)})
datetime_index = pd.to_datetime(df['date'])
df = df.set_index(datetime_index).drop('date', 1)
df.sort_index(inplace=True)
так, что df
равно:
count
date
2018-11-28 13:59:00 14
2018-11-28 14:00:00 30
2018-11-28 14:01:00 2
2018-11-28 14:02:00 42
2018-11-28 14:03:00 51<<< two minutes gap
2018-11-28 14:05:00 41<<< unlike others
2018-11-28 14:06:00 48
2018-11-28 14:07:00 4
2018-11-28 14:08:00 50
2018-11-28 14:09:00 93
Моя цель состоит в том, чтобы разделить df
на несколько кусков, где каждый блок имеет постоянную частоту, равную одной минуте.Таким образом, ожидаемый результат сверху стал бы:
#df0
count
date
2018-11-28 13:59:00 14
2018-11-28 14:00:00 30
2018-11-28 14:01:00 2
2018-11-28 14:02:00 42
2018-11-28 14:03:00 51
#df1
count
date
2018-11-28 14:05:00 41
2018-11-28 14:06:00 48
2018-11-28 14:07:00 4
2018-11-28 14:08:00 50
2018-11-28 14:09:00 93
Я пытался Разделить серию на промежутки времени в пандах? , что, к сожалению, было довольно устаревшим и не служило моей цели.
Я действительно достиг того, что хочу для приведенного выше примера, но фактический фрейм данных намного больше и имеет гораздо больше пробелов, что делает следующее решение крайне неэффективным:
df['diff'] = pd.Series(df.index).diff().values
dif = pd.Series(df.index).diff()
gap_index = dif[dif == pd.to_timedelta(120000000000)].index[0]
df[:gap_index], df[gap_index:]
Я бы очень хотелценим любое понимание этого вопроса