Сгруппировать и рассчитать разницу во времени - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть набор данных, который выглядит следующим образом

I.D       Timestamp
F322      2019-02-20 23:47:30.057
F322      2019-02-20 23:48:01.959 
F322      2019-02-20 23:50:04.308   
F422      2019-02-24 22:22:37.418
F422      2019-02-24 22:24:05.397

Я пытаюсь создать новый столбец, который вычитает разность каждой восходящей (уже отсортированной) временной метки по предыдущей временной метке прямо перед ней, носгруппированы по столбцу ID.Некоторые I.D имеют 2, 3 или 4 метки времени.

Вывод будет выглядеть примерно так

I.D       Timestamp                   Minutes
F322      2019-02-20 23:47:30.057         NaN
F322      2019-02-20 23:48:01.959         0.5
F322      2019-02-20 23:50:04.308         2.0
F422      2019-02-24 22:22:37.418         NaN
F422      2019-02-24 22:24:05.397         1.5

Я использовал что-то в прошлом, например, ниже, для чего-то другого

df.groupby('I.D')['Timestamp'].agg(lambda x: x.iat[0] < x.iat[-1])

np.where(df['I.D'].map(mask), 1, 2)

Чтобы получить значение 1или 2, но это было только для первой и второй строк сгруппированных по идентификатору и приводило только к значению, а не к калькуляции.

Спасибо за внимание!

1 Ответ

0 голосов
/ 28 февраля 2019

Вы можете использовать groupby и diff:

In [11]: res = df.groupby("I.D").Timestamp.diff()

In [12]: res
Out[12]:
0               NaT
1   00:00:31.902000
2   00:02:02.349000
3               NaT
4   00:01:27.979000
Name: Timestamp, dtype: timedelta64[ns]

Затем, разделив секунды на 60, вы получите минуты:

In [13]: res.dt.seconds / 60
Out[13]:
0         NaN
1    0.516667
2    2.033333
3         NaN
4    1.450000
Name: Timestamp, dtype: float64
...