python - 将连续的 GPS 数据拆分为单独的旅程

标签 python python-2.7 python-3.x pandas gps

我有大量文本文件格式的带有时间戳的 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/

相关文章:

python - 下载 PDF 作为文件对象,无需使用 Python 中的 Chrome 和 Selenium 下载文件

python - 导入 keras.datasets 不起作用

python - 使用 cv2.threshold() 函数绘制轮廓

python - 将 json 字符串作为参数传递给 Python 脚本会导致引号问题

python-3.x - 替代部分依赖图?

python : no module named selenium

python-2.7 - Amazon EMR Pyspark : rdd. unique.count() 失败

python - 停止列表选择?

python - 如何有效地计算字符串中字符频率的前缀和?

python - 从 Python 3.6 中的嵌套字典过滤所需的值