我正在尝试从数据帧计算测地距离,该数据帧由四列纬度和经度数据组成,大约有 300 万行。我使用 apply lambda 方法来完成此任务,但花了 18 分钟才能完成任务。有没有办法将矢量化与 NumPy 数组结合使用来加速计算?谢谢您的回答。
我的代码使用 apply 和 lambda 方法:
from geopy import distance
df['geo_dist'] = df.apply(lambda x: distance.distance(
(x['start_latitude'], x['start_longitude']),
(x['end_latitude'], x['end_longitude'])).miles, axis=1)
Updates:
我正在尝试这段代码,但它给了我错误:ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()。如果有人可以提供帮助,我们将不胜感激。
df['geo_dist'] = distance.distance(
(df['start_latitude'].values, df['start_longitude'].values),
(df['end_latitude'].values, df['end_longitude'].values)).miles
我想你可能会考虑使用geopandas
为此,它是 pandas 的扩展(因此numpy
)旨在非常快速地执行这些类型的计算。
具体来说,它有一种计算点集之间距离的方法GeoSeries,它可以是a的一列GeoDataFrame
。我相当确定这种方法可以利用numexpr
用于矢量化。
它应该看起来像这样,您可以将数据框转换为GeoDataFrame
与(至少)两个GeoSeries
可用于起点和终点的列。这应该返回一个GeoSeries
object:
import pandas as pd
import geopandas as gpd
from shapely.geometry import Point
geometry = [Point(xy) for xy in zip(df.longitude, df.latitude)]
gdf = gpd.GeoDataFrame(df, crs={'init': 'epsg:4326'}, geometry=geometry)
distances = gdf.geometry.distance(gdf.destination_geometry)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)