Pandas计算DataFrame每行经纬度到固定坐标点的公里距离
实现方法
直接使用pandas的逐行应用apply方法配合geopy即可完成批量距离计算,注意经纬度传入顺序必须是*(纬度, 经度)*,和geopy的参数要求保持一致,不要写反顺序。
完整可运行代码
import pandas as pd import geopy.distance # 若你已经读取了现有DataFrame,可跳过这段构造测试数据的代码 df = pd.DataFrame({ "code": ["01", "02", "03", "04", "05", "06"], "latitude": [40.410323, 41.490604, 39.287817, 38.594316, 36.900799, 36.541667], "longitude": [-3.993046, 1.696572, -0.435448, -0.128489, -3.423063, -4.625] }) # 定义固定目标点坐标 fixed_coords = (36.7196, -4.42002) # 逐行计算距离,生成新列 df["km_to_fixed_coords"] = df.apply( lambda row: geopy.distance.distance((row["latitude"], row["longitude"]), fixed_coords).km, axis=1 ) # 打印验证结果 print(df)
代码说明
axis=1参数指定apply按行遍历DataFrame,每次传入一行的Series对象,可直接通过列名提取对应经纬度值- 计算结果直接赋值给新列
km_to_fixed_coords,返回值单位默认为公里,和你提供的单点计算逻辑完全一致 - 运行结果和你给出的预期输出基本匹配,仅第6行因为示例原始数据经度(-4.625)和预期结果对应行的经度(-4.625342)存在微小精度差,计算值会有极小幅偏差,替换为你的真实业务数据即可得到完全一致的结果
性能提示
- 该写法在数据量10万行以内时运行效率足够日常使用
- 如果你的数据量达到百万级,逐行
apply速度会明显变慢,可以替换为pyproj等支持矢量计算的大地距离库实现批量计算,效率可提升数十倍
内容的提问来源于stack exchange,提问作者Carola
相关产品推荐
相关产品推荐

