我有大量文本文件格式的带有时间戳的 GPS 数据样本。每辆车的数据都有一个唯一的ID。我很容易地创建了一个 Pandas 数据框,然后意识到每辆车的 GPS 数据实际上是几个月的连续轨迹。
我想做的是通过在 GPS 报告的间隙超过一定增量(例如 10 分钟)时分割轨道来隔离各个旅程。我不认为我可以假设在一次旅程结束和下一次旅程开始之间位置不会改变(尽管它/应该/非常接近)。
uid ts lat lon
ABC 2017-01-01 00:00:00 0.0000 0.0000
ABC 2017-01-01 00:00:05 0.0000 0.0100
ABC 2017-01-01 00:00:10 0.0000 0.0200
ABC 2017-01-01 00:10:00 0.0100 0.0300 <--- New Journey. 10 min delta
ABC 2017-01-01 00:10:05 0.0100 0.0400
ABC 2017-01-01 00:10:10 0.0100 0.0500
ABC 2017-01-01 00:10:15 0.0100 0.0600
DEF 2017-01-01 20:00:00 1.0000 1.0000
DEF 2017-01-01 20:00:05 1.0000 1.0100
DEF 2017-01-01 20:00:10 1.0000 1.0200
DEF 2017-01-01 20:20:00 1.0100 1.0300 <--- New Journey. 20 min delta
DEF 2017-01-01 20:20:05 1.0100 1.0400
DEF 2017-01-01 20:20:10 1.0100 1.0500
DEF 2017-01-01 20:20:15 1.0100 1.0600
有人可以建议我如何有效地隔离单独的旅程吗? Pandas 的解决方案绝对不是必需的。
最佳答案
以下将数据帧 df
拆分为数据帧列表:
delta = pd.to_timedelta(10, unit='m')
breaks = df['ts'].diff() > delta # Feel free to add other conditions!
#0 False
#....
#6 False
#7 True
#8 False
#9 False
#10 True
#11 False
#12 False
#13 False
#Name: ts, dtype: bool
break_locs = df[breaks].index
#Int64Index([7, 10], dtype='int64')
trips = np.array_split(df, break_locs)
#[ uid ts lat lon
#0 ABC 2017-01-01 00:00:00 0.00 0.00
#1 ABC 2017-01-01 00:00:05 0.00 0.01
#2 ABC 2017-01-01 00:00:10 0.00 0.02
#3 ABC 2017-01-01 00:10:00 0.01 0.03
#4 ABC 2017-01-01 00:10:05 0.01 0.04
#5 ABC 2017-01-01 00:10:10 0.01 0.05
#6 ABC 2017-01-01 00:10:15 0.01 0.06, uid ts lat lon
#7 DEF 2017-01-01 20:00:00 1.0 1.00
#8 DEF 2017-01-01 20:00:05 1.0 1.01
#9 DEF 2017-01-01 20:00:10 1.0 1.02, uid ts lat lon
#10 DEF 2017-01-01 20:20:00 1.01 1.03
#11 DEF 2017-01-01 20:20:05 1.01 1.04
#12 DEF 2017-01-01 20:20:10 1.01 1.05
#13 DEF 2017-01-01 20:20:15 1.01 1.06]
len(trips)
#3
关于python - 将连续的 GPS 数据拆分为单独的旅程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44479400/