Следующий набор данных содержит метки времени gps автобусов, прибывающих на определенную остановку.В то время как шины бездействуют на остановке, передатчики GPS продолжают отправлять данные с полурегулярными приращениями.
Я пытаюсь скомпилировать время отправления каждого автобуса с этой одной автобусной остановки.Однако усложняющим фактором является то, что одни и те же автобусы могут повторять маршрут примерно с 2-часовыми интервалами.
В приведенном ниже кадре данных, если шина NYCT_1202
останавливается на 10:01:19
в строке 0
и остается на остановке до 10:11:48
в строке 1
, я хочу как-то выбрать для 10:11:48
.
Точно так же, после двух часов, когда один и тот же автобус объезжал, чтобы снова доехать до остановки в ряду 2
на 12:51:31
, он «бездействует» (возможно, он не работал), пока13:51:02
.Я хочу выбрать в последний раз, 13:51:02
.
df = pd.DataFrame({'RecordedAtTime': {0: Timestamp('2017-08-23 10:01:19'),
1: Timestamp('2017-08-23 10:11:48'),
2: Timestamp('2017-08-23 12:51:31'),
3: Timestamp('2017-08-23 13:02:02'),
4: Timestamp('2017-08-23 13:11:27'),
5: Timestamp('2017-08-23 13:51:35'),
6: Timestamp('2017-08-23 16:12:27'),
7: Timestamp('2017-08-23 16:52:25'),
8: Timestamp('2017-08-07 09:33:42'),
9: Timestamp('2017-08-07 10:13:36')},
'VehicleRef': {0: 'NYCT_1202',
1: 'NYCT_1202',
2: 'NYCT_1202',
3: 'NYCT_1202',
4: 'NYCT_1202',
5: 'NYCT_1202',
6: 'NYCT_1202',
7: 'NYCT_1202',
8: 'NYCT_1206',
9: 'NYCT_1206'}})
RecordedAtTime VehicleRef
0 2017-08-23 10:01:19 NYCT_1202
1 2017-08-23 10:11:48 NYCT_1202 <-This Row
2 2017-08-23 12:51:31 NYCT_1202
3 2017-08-23 13:02:02 NYCT_1202
4 2017-08-23 13:11:27 NYCT_1202
5 2017-08-23 13:51:35 NYCT_1202 <-This Row
6 2017-08-23 16:12:27 NYCT_1202
7 2017-08-23 16:52:25 NYCT_1202 <-This Row
8 2017-08-07 09:33:42 NYCT_1206
9 2017-08-07 10:13:36 NYCT_1206 <-This Row
Если бы автобусы не возвращались, я мог бы использовать df.groupby(by=['VehicleRef','RecordedAtTime']).last
, чтобы выбрать в последний раз.
Я также попытался создать столбец TimeDelta
с df['TimeDelta']=df['RecordedAtTime'].diff
, чтобы применить df.loc[lambda x: x['TimeDelta']>2]
.Однако diff
не приводит к разнице между 0-м и 1-м разами в строке 0, что означает, что я не могу выбрать строки по их временным дельтам.
RecordedAtTime VehicleRef timeDelta
0 2017-08-23 10:01:19 NYCT_1202 NaT <-Should be 00:10:29
1 2017-08-23 10:11:48 NYCT_1202 0 days 00:10:29 <-Should be 02:39:43
2 2017-08-23 12:51:31 NYCT_1202 0 days 02:39:43
3 2017-08-23 13:02:02 NYCT_1202 0 days 00:10:31
4 2017-08-23 13:11:27 NYCT_1202 0 days 00:09:25
5 2017-08-23 13:51:35 NYCT_1202 0 days 00:40:08 <-Should be 02:20:52
6 2017-08-23 16:12:27 NYCT_1202 0 days 02:20:52
7 2017-08-23 16:52:25 NYCT_1202 0 days 00:39:58 <-Should be +16:41:17
8 2017-08-07 09:33:42 NYCT_1206 -17 days +16:41:17
9 2017-08-07 10:13:36 NYCT_1206 0 days 00:39:54 <-Should be next difference
Так какую библиотеку панд я мог бы использоватьДля решения этой проблемы?Есть ли лучший способ использовать .diff
или мне следует подойти к этой проблеме совершенно по-другому?