У меня есть DataFrame из нескольких поездок, который выглядит примерно так:
TripID Lat Lon time delta_t
0 1 53.55 9.99 74 1
1 1 53.58 9.99 75 1
2 1 53.60 9.98 76 5
3 1 53.60 9.98 81 1
4 1 53.58 9.99 82 1
5 1 53.59 9.97 83 NaN
6 2 52.01 10.04 64 1
7 2 52.34 10.05 65 1
8 2 52.33 10.07 66 NaN
Как вы можете видеть, у меня есть записи о местоположении и времени, которые все относятся к некоторой поездке, идентифицированной поездкойЯ БЫ.Я также вычислил delta_t
как время, которое проходит до записи, следующей за поездкой.Последней записи каждой поездки присваивается NaN
как delta_t
.
Теперь мне нужно убедиться, что шаг времени моих записей одинаков для всех моих данных.Я пошел с одной единицей времени для этого примера.По большей части поездки удовлетворяют этому условию, но время от времени у меня есть одна запись, например, запись №.2, в другом прекрасном путешествии это не так.
Вот почему я хочу просто разделить мою поездку на две поездки на данный момент.Это все равно застряло.Кажется, я не могу найти хороший способ сделать это.
Чтобы рассматривать каждую поездку отдельно, я думал о чем-то вроде этого:
for key, grp in df.groupby('TripID'):
# split trip at too long delta_t(s)
Однако фактическое расщепление внутрипетля - это то, что я не знаю, как сделать.По сути, мне нужно назначить новый идентификатор поездки для каждой записи от одной большой delta_t
до следующей (или до конца поездки) или выполнить какую-либо операцию группировки, которая может группировать эти большие delta_t
.
Я знаю, что это довольно специфическая проблема.Я надеюсь, что у кого-то есть идея, как это сделать.
Я думаю, что новыми NaN
, которые потом понадобятся, можно сначала пренебречь, а потом легко добавить с помощью этой строки (которая, как я знаю, работаетдля восходящих идентификаторов поездки):
df.loc[df['TripID'].diff().shift(-1) > 0, 'delta_t'] = np.nan