我有几个旅行的数据帧,看起来像这样:
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
如您所见,我有位置和时间的记录,它们都属于某个trip,由trip ID标识。我还计算了delta_t
作为直到trip中后面的条目为止的时间。每个trip的最后一个条目被分配NaN
作为它的delta_t
。你知道吗
现在我需要确保记录的时间步长在所有数据中都是相同的值。对于这个例子,我用了一个时间单位。在大多数情况下,旅行确实满足了这个条件,但我偶尔会有一个记录,比如2号记录,在一次其他方面都不错的旅行中,那就不符合了
这就是为什么我想简单地把我的旅行分成两次。但我还是被卡住了。我似乎找不到一个好办法。你知道吗
考虑到每一次旅行本身,我想到了这样的事情:
for key, grp in df.groupby('TripID'):
# split trip at too long delta_t(s)
然而,循环中的实际分裂是我不知道怎么做的。基本上,我需要为从一个大的delta_t
到下一个(或旅行结束时)的每个条目分配一个新的旅行ID,或者进行某种分组操作,在这些大的delta_t
之间进行分组。你知道吗
我知道这是一个非常具体的问题。我希望有人知道怎么做。你知道吗
我认为新的NaN
一开始可以忽略,以后可以很容易地添加到这一行(我知道它只适用于升序trip id):
df.loc[df['TripID'].diff().shift(-1) > 0, 'delta_t'] = np.nan
IIUC,不需要循环。下面根据两个条件创建一个名为
new_TripID
的新列:原始TripID
从一行更改到下一行,或者time
列中的差异大于一行请注意,从您的描述和数据来看,您似乎真的可以使用^{} ,您可能应该研究它以进行其他操作。然而,在你要求的特殊情况下,这是不必要的
相关问题 更多 >
编程相关推荐