Я пытаюсь установить начальное значение "elapsedSeconds" для каждой группы. В настоящее время я могу определить значения elapsedSeconds, однако при обнаружении нового payArea мне нужно сбросить начальные значения elapsedSeconds на 0.
В настоящее время получаю:
> 0 location_day timestamp payArea Name ratePay elapsedSeconds
> 1 2019-12-10 2019-12-10 12:00:01 Area1 Amy 12.25 230
> 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:01 Area2 Amy 12.25 1668
> 5 2019-12-17 2019-12-17 15:00:10 Area2 Amy 8.75 9
> 6 2019-12-17 2019-12-17 15:00:21 Area2 Amy 12.25 10
> 7 2019-12-17 2019-12-17 15:00:26 Area2 Amy 8.75 5
Желаемый результат:
> 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:01 Area2 Amy 12.25 0
> 5 2019-12-17 2019-12-17 15:00:10 Area2 Amy 8.75 9
> 6 2019-12-17 2019-12-17 15:00:21 Area2 Amy 12.25 10
> 7 2019-12-17 2019-12-17 15:00:26 Area2 Amy 8.75 5
Текущая попытка:
df['elapsedSeconds'] = df.sort('location_day').groupby(['location_day','payArea','ratePay','Name'])['timestamp'].diff()/1000
df['elapsedSeconds'] = ((df['elapsedSeconds'] / np.timedelta64(1, 's')) *1000).astype(float)
df['elapsedSeconds'].dropna(inplace = True)
df['elapsedSeconds'] = df.loc[df.groupby(['location_day','payArea','ratePay','Name'])['timestamp'].idxmin(),'elapsedSeconds'] = 0
Последняя попытка:
df.loc[df.sort('timestamp').groupby(['location_day','payArea','ratePay','Name'])['elapsedSeconds'].head(1).index, 'elapsedSeconds'] = 0