Сброс рассчитанного значения для группы по первому значению - PullRequest
1 голос
/ 30 января 2020

Я пытаюсь установить начальное значение "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
...