【发布时间】:2021-11-04 21:20:37
【问题描述】:
我想计算两个gps坐标之间的距离(每个tripId的第一个和最后一个),以获得每次行程的距离 我的数据框看起来像这样
tripId latitude longitude timestamp
0 1817603 53.155273 8.207176 2021-05-24 00:29:22
1 1817603 53.155271 8.206898 2021-05-24 00:29:38
2 1817603 53.155213 8.206314 2021-05-24 00:29:44
3 1817603 53.155135 8.206429 2021-05-24 00:29:50
4 1817603 53.154950 8.206565 2021-05-24 00:29:56
... ... ... ... ...
195 1817888 53.092805 8.212095 2021-05-24 08:27:54
196 1817888 53.093024 8.211756 2021-05-24 08:27:59
197 1817888 53.093305 8.211383 2021-05-24 08:28:05
198 1817888 53.093594 8.211026 2021-05-24 08:28:10
199 1817888 53.093853 8.210708 2021-05-24 08:28:15
我使用s = pd.Series(haversine_vector(df, df.shift(),Unit.KILOMETERS), index=df.index, name='distance_K')为每个步骤都这样做了
但我需要知道每个 ID 的整个行程的距离
我已将此用作测试并且有效,但我需要知道每次旅行的确切持续时间(最终持续时间)
for i in range(1,df.shape[0]-1):
if df['tripId'][i]==df['tripId'][i+1]:
df['distance'][i]=df['distance'][i-1]+df['distance_K'][i]
else:
df['distance'][i]=df['distance_K'][i]
【问题讨论】:
-
在计算完每个距离后,您是否尝试过
df.groupby("tripId").sum()? -
@OneCricketeer,看起来需要在计算距离之前识别组。否则将考虑行程 N 的最后一个点和行程 N+1 的第一个点之间的距离。
-
@OneCricketeer 不,它不起作用,我在描述上添加了一个小测试,它有效但仍然不完整:/我只想知道最终的确切持续时间
-
我不确定您是否可以让
pandas执行此操作。您只需要每次旅行的第一个和最后一个点,然后您就可以计算距离和经过的时间。我想我会在进入pandas之前迭代行或处理它。也许您可以将每个tripId 的min(timestamp)提取到一个DF 中,将每个tripId 的max(timestamp)提取到另一个df 中,然后并行处理这些行。 -
你能检查我的答案,如果它是你所期望的,好吗?我使用了@TimRoberts 和 \@OneCriketeer 的建议。
标签: python pandas data-analysis