【发布时间】:2018-11-08 09:20:13
【问题描述】:
我有几个行程的 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
如您所见,我有位置和时间的记录,它们都属于某个行程,由行程 ID 标识。我还计算了delta_t 作为行程中随后的条目所经过的时间。每个行程的最后一个条目被分配NaN 作为它的delta_t。
现在我需要确保我的记录的时间步长在我的所有数据中都是相同的值。对于这个例子,我使用了一个时间单位。在大多数情况下,旅行确实满足这个条件,但我时不时地有一个记录,比如记录号。 2,在其他美好的旅行中,那不是。
这就是为什么我现在想简单地将我的旅行分成两次旅行。那让我卡住了。我似乎找不到这样做的好方法。
为了单独考虑每次旅行,我在想这样的事情:
for key, grp in df.groupby('TripID'):
# split trip at too long delta_t(s)
但是,循环内的实际拆分是我不知道该怎么做的。基本上,我需要为从一个大的delta_t 到下一个(或旅行结束)的每个条目分配一个新的旅行 ID,或者进行某种分组操作,可以在这些大 delta_t 之间进行分组。
我知道这是一个非常具体的问题。我希望有人知道如何做到这一点。
我认为新的NaNs,然后是需要的,一开始可以忽略,以后可以很容易地用这一行添加(我知道它只适用于升序旅行 ID):
df.loc[df['TripID'].diff().shift(-1) > 0, 'delta_t'] = np.nan
【问题讨论】:
-
我不确定我是否了解您想要做什么,但是:
df.groupby('TripID')['delta_t'].eq(df['delta_t'].shift())可能会完成这项工作? -
请使用发布的样本显示所需的结果。这通常比文字更能说明问题。
标签: python pandas dataframe time-series