You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中高效基于DataFrame四列生成geodesic距离列

问题解答

你的代码存在两处关键问题,无法直接运行,不过可以通过调整写法实现高效计算两点 geodesic 距离的需求:

你的代码问题分析

  • 列选择错误:df['x1', 'y1', 'x2', 'y2'] 这种写法是按行索引取值(若行索引为元组时),正确选择多列需要用双层方括号:df[['x1', 'y1', 'x2', 'y2']]
  • map 用法错误:map 对 DataFrame 调用时是逐元素处理,而非逐行。要处理每行数据,应该用 apply(axis=1),且 lambda 参数不能直接拆成 x,y,z,w,需要从行对象中提取对应值。

可行的高效实现方式

方式1:使用 apply 逐行处理(简洁直观)

from geopy.distance import geodesic

# 计算距离,这里用.meters返回米为单位,可根据需求换成.miles等单位
df['distance'] = df.apply(lambda row: geodesic((row['x1'], row['y1']), (row['x2'], row['y2'])).meters, axis=1)

方式2:使用 itertuples 生成器推导(性能更优)

如果追求更高效率,itertuples 比 apply 更快,因为它直接返回元组,减少了 Series 对象的创建开销:

df['distance'] = [
    geodesic((x1, y1), (x2, y2)).meters 
    for x1, y1, x2, y2 in df.itertuples(index=False, name=None)
]

这两种方式都避免了显式循环,且能高效完成距离计算。

内容的提问来源于stack exchange,提问作者Ivan Shabashov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 16:22:54