我为大量文本文件格式的车辆提供了大量带时间戳的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的解决方案绝对不是必需的。
答案 0 :(得分:5)
以下内容将数据框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