У меня есть HUGHE DataFrame, который выглядит следующим образом (это просто пример, иллюстрирующий проблему):
id timestamp target_time interval
1 08:00:00 10:20:00 (10-11]
1 08:30:00 10:21:00 (10-11]
1 09:10:00 11:30:00 (11-12]
2 09:15:00 10:15:00 (10-11]
2 09:35:00 10:11:00 (10-11]
3 09:45:00 11:12:00 (11-12]
...
Я хотел бы создать серию, выглядящую следующим образом:
interval timestamp unique_ids
(10-11] 08:00:00 1
08:30:00 1
09:15:00 1
09:35:00 1
(11-12] 09:10:00 1
09:45:00 2
Цель состоит в том, чтобы подсчитать, для каждого временного интервала, сколько уникальных идентификаторов имели соответствующие target_time в пределах интервала в их временной метке.Обратите внимание, что target_time для каждого идентификатора может изменяться в разные временные метки.Например, для идентификатора 1 интервал составляет (10-11) с 08:00:00 до 08:30:00, но затем он изменяется на (11-12] в 09:10:00. Следовательно, в 09:15:00 Я не хочу подсчитывать идентификатор 1 в полученной серии.
Я пробовал подход groupby -> expand -> np.unique, но он не дает желаемого результата:
df.set_index('timestamp').groupby('interval').id.expanding().apply(lambda x: np.unique(x).shape[0])
interval timestamp unique_ids
(10-11] 08:00:00 1
08:30:00 1
09:15:00 2
09:35:00 2
(11-12] 09:10:00 1
09:45:00 2
Любой намек на то, как я могу подойти к этой проблеме? Я хочу максимально использовать процедуры pandas, чтобы сократить время вычислений, поскольку длина DataFrame составляет 1453076 ...
Большое спасибо заранее!