如何用Pandas结合Geopy计算DataFrame相邻行坐标的距离?
计算Pandas DataFrame中相邻行地理坐标的距离(Geopy实现)
最简实现方案
直接利用Pandas的shift()方法获取下一行的坐标,结合apply()调用Geopy的geodesic计算距离:
import pandas as pd import geopy.distance # 原始数据初始化 r = {'poly':[(49.419453, 0.232884),(49.41956, 0.23269),(49.41956, 0.23261),(49.41953, 0.23255),(49.41946, 0.23247)]} df = pd.DataFrame(r) # 获取下一行的坐标(最后一行会得到NaN) df['next_poly'] = df['poly'].shift(-1) # 计算相邻行的距离(单位:米),最后一行无后续行,设为0 df['dist'] = df.apply( lambda row: geopy.distance.geodesic(row['poly'], row['next_poly']).m if pd.notna(row['next_poly']) else 0, axis=1 ) # 可选:删除临时辅助列 df = df.drop('next_poly', axis=1) print(df)
补充优化(大数据量场景)
如果数据量较大,列表推导式比apply()性能更优,可替代使用:
df['dist'] = [ geopy.distance.geodesic(df['poly'].iloc[i], df['poly'].iloc[i+1]).m for i in range(len(df)-1) ] + [0]
关键说明
shift(-1):将坐标列整体上移一行,让当前行直接匹配下一行的坐标,最后一行因无后续数据会生成NaN。- 计算时通过
pd.notna()过滤空值,避免报错;最后一行的距离值可根据需求调整为NaN或其他默认值。
内容的提问来源于stack exchange,提问作者JK2018
相关产品推荐
相关产品推荐

