首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为数据帧中的每个点(最近的邻居)获取最近点的Pythonic方法

为数据帧中的每个点(最近的邻居)获取最近点的Pythonic方法
EN

Stack Overflow用户
提问于 2014-02-17 12:24:48
回答 1查看 2.6K关注 0票数 2

我有一份地点和塔楼的清单。我想找出每一个地点最近的塔是什么。我想出了一种行之有效的方法,但我确信这是一种非常低效的方法。

我怎样才能用一种更复杂的方式来做这件事呢?

我有大约4,000个地点和11,000个塔楼。我现在:

  1. 在每个位置上循环
  2. 寻找到所有塔楼的距离
  3. 按距离排序
  4. 取最近的一个,然后将其附加到'nearest_tower‘数据帧中。

下面是代码:

代码语言:javascript
运行
复制
nearest_tower = pd.DataFrame()

for i, location_rows in d[["Name", "Lat", "Long"]].T.iteritems():
    tower_coords["Distance_km"] =  tower_coords.apply(lambda row: distance_on_unit_sphere(location_rows ["Lat"], location_rows ["Long"], row['DIGITAL_LATITUDE'], row['DIGITAL_LONGITUDE'])*6373, axis=1)
    a = tower_coords.sort(['Distance_km'], ascending = 1)[:1][["SITE_NUMBER", "DIGITAL_LATITUDE", "DIGITAL_LONGITUDE", "Distance_km"]]
    a["Location_Name"] = location_rows ["Name"]
    a["Location_Lat"] = location_rows ["Lat"]
    a["Location_Long"] = location_rows ["Long"]
    nearest_tower = nearest_tower.append(a)
    print(i)

Tower_coords看起来是这样的:

代码语言:javascript
运行
复制
SITE_NUMBER    DIGITAL_LATITUDE      DIGITAL_LONGITUDE
1                67.21                     -30.432
...
EN

回答 1

Stack Overflow用户

发布于 2014-02-17 13:00:31

首先,使用min (这里的Python文档)查找最近的。您可以在迭代之后提供一个key参数(这将是您的lambda函数)。

如果使用类而不是类似哈希的结构而不是a对象,则会更像pythonic。像PyPy这样的实现处理类属性访问比使用类似哈希的访问更有效。

整个函数可以变成一个map操作。您使用一个结构并将其映射到另一个结构,元素之间的对应关系为1-1,这使得这是一个map

最后(这不是关于Pythonic的,但它很重要),您应该使用k-d树结构来高效地找到最近的点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21829065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档