我有一个数据框,其中包含线条、点ID、X和Y坐标;每条线都包含一组具有X,Y坐标的点:
LINE Point ID X coordinate Y Coordinate
A 1 1 2
A 2 2 2
A 3 3 2
B 1 11 3
B 2 12 3
B 3 13 3
尝试计算一条线段中相邻点之间的欧几里得距离,以获得以下结果:
LINE Point ID X coordinate Y Coordinate Euclidean Dist.
A 1 1 2
A 2 2 2 1 (dist between Point ID's 1 and 2 for line A)
A 3 3 2 1 (dist between Point ID's 2 and 3 for line A)
B 1 11 3
B 2 12 3 1 (dist between Point ID's 1 and 2 for line B)
B 3 13 3 1 (dist between Point ID's 2 and 3 for line B)
我的尝试是创建一个 DataFrame,使用 groupby 来分组 'LINE' 行,然后通过使用 scipy 计算一条线内相邻点之间的欧几里得距离:
predist = df.groupby(['LINE']).apply(lambda x: x)
dist = pdist(predist[['X', 'Y']], 'euclidean')
我一定做错了什么,因为我得到的结果是在一条线的第一个点和该线中每个连续点之间累积的距离,而不是连续点创建的每个单独线段之间的距离(坐标元组)。
diff = (df[['y', 'x']] - df.groupby('TRACKID')[['y', 'x']].shift(1))
和np.sqrt((diff**2).sum())
。这样可以在几行代码中完成,并允许任意数量的维度。 - emigre459