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

根据DataFrame经纬度坐标查找最近位置并获取对应名称

解决方法

核心逻辑是用哈弗辛(Haversine)公式计算地球球面经纬度距离,再为df1的每个点位匹配df2中距离最近的点位名称。注意你给出的df2定义中Name列表的元素缺少字符串引号,我会先修正避免运行报错。


完整实现代码

import pandas as pd
import numpy as np

# 哈弗辛公式:输入两点经纬度,返回两点距离(单位:公里)
def haversine(lat1, lon1, lat2, lon2):
    # 角度转弧度
    lat1, lon1, lat2, lon2 = map(np.radians, [lat1, lon1, lat2, lon2])
    dlat = lat2 - lat1
    dlon = lon2 - lon1
    # 公式计算逻辑
    a = np.sin(dlat/2)**2 + np.cos(lat1) * np.cos(lat2) * np.sin(dlon/2)**2
    c = 2 * np.arcsin(np.sqrt(a))
    return c * 6371 # 6371为地球平均半径,单位公里

# 初始化两个DataFrame
dloc1 = {'lat': [41.75, 41.87,41.77], 'long': [-87.62, -87.74,-87.69]}
df1 = pd.DataFrame(data=dloc1)
dloc2 = {'Name': ['a','c','b'], 'lat': [41.830, 41.90,41.97], 'long': [-87.62, -87.69,-88.65]}
df2 = pd.DataFrame(data=dloc2)

# 为df1每行匹配最近点位的Name
df1['nearest_name'] = df1.apply(
    lambda row: df2.iloc[haversine(row['lat'], row['long'], df2['lat'], df2['long']).argmin()]['Name'],
    axis=1
)

运行结果

打印df1即可看到新增的匹配结果列:

序号latlongnearest_name
041.75-87.62a
141.87-87.74c
241.77-87.69a

如果你的数据量超过10万条,可以改用scipy.spatial.distance.cdist做向量化计算提升效率,小数据量上述方法足够使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:30:01