pandas Dataframe 行长度

h5qlskok  于 2022-12-02  发布在  其他
关注(0)|答案(1)|浏览(193)

我有一个 Dataframe ,其中包含一系列对象随时间变化的x-y坐标。我试图计算出这些对象中每一个的总路径长度。我知道计算直线长度的公式。

(√((x2-x1))^2+(y2-y1))) + (√((x3 - x2))^2+(y3-y2)))...

如何计算出每个单独对象从数据框中经过的路径长度?
提前感谢!

tct7dpnv

tct7dpnv1#

我不确定你所说的“每个单独对象路径的长度”到底是什么意思。如果你想把数据框中每两个连续点之间的距离相加,最后一个点连接到第一个点,使用如下的方法:

import math

data = {"x": [0,2,6,4,0,3,6]
        "y": [0,4,2,3,4,1,7]
       }
df = pd.DataFrame(data)

points = list(df.to_records(index=False))
total_length = sum(math.hypot(p[i][0] - p[i-1][0], p[i][1] - p[i-1][1]) for i,_ in enumerate(p))
print(total_length)

如果你想为2d点集找到一个2d船体(也就是最小边界多边形),可以使用scipy库。

from scipy.spatial import ConvexHull, convex_hull_plot_2d
points_arr = np.array([[x,y] for x,y in points])
hull = ConvexHull(points_arr)

import matplotlib.pyplot as plt
plt.plot(points_arr[:,0], points_arr[:,1], 'o')
hs = hull.simplices
for simplex in hull.simplices:
    plt.plot(points_arr[simplex, 0], points_arr[simplex, 1], 'k-')

total_length = sum(math.dist(hs[i], hs[i-1]) for i,_ in enumerate(hs))
print(total_length)

相关问题