Еще одна попытка вычислить столбец 'elapsedSeconds' на основе условия, примененного к предыдущему значению 'payArea'.
С этим фреймом данных:
> 0 location_day timestamp payArea Name ratePay elapsedSeconds
> 1 2019-12-10 2019-12-10 12:00:01 Area1 Amy 12.25 365
> 2 2019-12-10 2019-12-10 12:00:06 Area1 Amy 12.25 5
> 3 2019-12-10 2019-12-10 12:00:16 Area1 Amy 12.25 10
> 4 2019-12-17 2019-12-17 15:00:16 Area2 Amy 12.25 10800
> 5 2019-12-17 2019-12-17 15:00:36 Area2 Amy 8.75 20
> 6 2019-12-17 2019-12-17 15:00:40 Area2 Amy 12.25 4
> 7 2019-12-17 2019-12-17 15:00:50 Area2 Amy 8.75 10
> 8 2019-12-17 2019-12-17 15:01:10 Area1 Amy 12.25 380
> 9 2019-12-17 2019-12-17 15:01:45 Area1 Amy 12.25 35
> 10 2019-12-17 2019-12-17 15:02:01 Area1 Amy 12.25 16
Желаемая логика c для применяется: ЕСЛИ «payArea» равно предыдущему значению «payArea», ТО рассчитывает разницу между отметкой времени в секундах, иначе, если «payArea» не равно предыдущему значению «payArea», тогда «elapsedSeconds» = 0.
Это должно в основном "сбросить" elapsedSeconds = 0 в любой точке условие НЕ выполнено .
Желаемый вывод:
> 0 location_day timestamp payArea Name ratePay elapsedSeconds
> 1 2019-12-10 2019-12-10 12:00:01 Area1 Amy 12.25 0
> 2 2019-12-10 2019-12-10 12:00:06 Area1 Amy 12.25 5
> 3 2019-12-10 2019-12-10 12:00:16 Area1 Amy 12.25 10
> 4 2019-12-17 2019-12-17 15:00:16 Area2 Amy 12.25 0
> 5 2019-12-17 2019-12-17 15:00:36 Area2 Amy 8.75 20
> 6 2019-12-17 2019-12-17 15:00:40 Area2 Amy 12.25 4
> 7 2019-12-17 2019-12-17 15:00:50 Area2 Amy 8.75 10
> 8 2019-12-17 2019-12-17 15:01:10 Area1 Amy 12.25 0
> 9 2019-12-17 2019-12-17 15:01:45 Area1 Amy 12.25 35
> 10 2019-12-17 2019-12-17 15:02:01 Area1 Amy 12.25 16
I ранее вычислял истекшие секунды с этим,
#first get the elapsedSeconds as datetime
df['elapsedSeconds'] = df.sort('timestamp').groupby(['name','payArea'])['timestamp'].diff()/1000
#now convert the diff value as float type
df['elapsedSeconds'] = ((df['elapsedSeconds'] / np.timedelta64(1, 's')) *1000).astype(float)