Python 初学者在这里。我有一个由 X、Y 点组成的 python 数据框,看起来类似于:
我想做的是查看第 1 行并找到第 1 行和第 2 行之间的距离,并将这 2 个 X、Y 位置之间的新距离输出到名为“dist”的新列。然后对第 2 行和第 3 行执行相同的操作,依此类推。我的 X,Y 数据比这大得多,但这是我的问题的基础。最终数据停止,每个点组成一条更大的折线,因此终点的距离为零。
我知道我可以尽可能少地使用 geopy、numpy 和 pyproj。我最初尝试了 haversine 距离,但在导入 python 模块时遇到了问题。我不确定如何使用这些模块来解决这个问题,我是否需要一个搜索光标并将其应用于每一行?
为了计算以下点之间的距离,您可以使用以下方法。出于测试目的,我定义了一个矩形的角。
X = [0, 1, 1, 0, 0]
Y = [0, 0, 1, 1, 0]
df = pd.DataFrame({"X": X, "Y": Y})
df["X_lag"] = df["X"].shift(1)
df["Y_lag"] = df["Y"].shift(1)
distances = np.sqrt((df['X']-df["X_lag"])**2+(df['Y']-df["Y_lag"])**2)
print(distances)
这给出了具有以下值的 pandas 系列:
[nan, 1.0, 1.0, 1.0, 1.0]
所以现在你可以用
df.drop(["X_lag", "Y_lag"], axis=1, inplace=True)
删除滞后列,你会得到:
X Y distance
0 0 NaN
1 0 1.0
1 1 1.0
0 1 1.0
0 0 1.0