Как посчитать разницу между временными точками внутри группы при группировке?
Имеется фрейм, в котором есть столбец time (datetime64[ns, UTC]) и столбец ID (int64), содержащий ID предметов. ID дублируются, потому что у них разные значения в столбце time. Количество дубликатов варьируется от 2 до >30.
Нужно понять, в следствие чего возникает эта разница и если она, условно, меньше 1 дня - это случай А, а если больше - случай Б. Для этого, как я понимаю, нужно посчитать разницу между значениями time для каждого ID
Мне понятно, что для этого нужно сгруппировать по столбцу ID, но я не знаю как посчитать разницу между максимальным и минимальным временем внутри группы.
Какую функцию аггрегировать? И повлияет ли на это количество дубликатов?
На выходе хотел бы получить фрейм, со столбцами ID и Diff_dd (разница между датами в днях).
Ссылка на образец фрейма в csv
Ответы (1 шт):
Попробуйте так:
df["tag"] = \
(df
.groupby("ID")
["time"]
.transform(lambda x: "A" if (x.max() - x.min()).days < 1 else "B"))
результат:
In [17]: df
Out[17]:
time ID tag
0 2021-02-10 12:48:47.219679+00:00 16192451275000 A
1 2021-02-10 12:48:52.400780+00:00 16192451275000 A
2 2020-10-06 08:41:51.018953+00:00 16389299849000 A
3 2020-10-06 08:41:51.879025+00:00 16389299849000 A
4 2020-10-06 08:41:52.563313+00:00 16389299849000 A
.. ... ... ..
995 2020-12-23 15:57:09.970337+00:00 20035780455000 A
996 2020-12-23 15:57:10.387862+00:00 20035780455000 A
997 2020-12-23 15:57:10.831439+00:00 20035780455000 A
998 2020-12-29 14:03:55.819637+00:00 20037163637000 A
999 2020-12-29 14:03:55.763292+00:00 20037163637000 A
[1000 rows x 3 columns]