我有一个名为 SD_Apartments 的数据框,它有 3 个变量:名称(对象)、纬度 (float64)、经度 (float64)。这是公寓名称及其坐标的列表。
我有另一个名为 SD_Coffee 的数据框,它有 3 个变量:名称(对象)、纬度 (float64)、经度 (float64)。这是咖啡店名称及其坐标的列表。
我想向 SD_apartments 添加另一个名为 Coffee_count 的变量,该变量将包含 SD_coffee 数据框中列出的距离 SD_apartments 中列出的每间公寓 x(例如 300)米以内的咖啡店位置数量。
这是我正在使用的代码的设置:
import pandas as pd
import geopy.distance
from geopy.distance import geodesic
data = [['Insomnia', 32.784782, -117.129130], ['Starbucks', 32.827521, -117.139966], ['Dunkin', 32.778519, -117.154720]]
data1 = [['DreamAPT', 32.822090, -117.184200], ['OKAPT', 32.748081, -117.130691], ['BadAPT', 32.786886, -117.097536]]
SD_Coffee = pd.DataFrame(data, columns = ['name', 'latitude', 'longitude'])
SD_Apartments = pd.DataFrame(data1, columns = ['name', 'latitude', 'longitude'])
这是我试图用来实现我的目标的代码:
def geodesic_pd(df1, df2_row):
return [(geodesic([tuple(x) for x in row.values], [tuple(x) for x in df2_row.values]).m for row in df1)]
SD_Apartments['coffee_count'] = pd.Series([(sum(geodesic_pd(SD_Coffee[['latitude', 'longitude']], row) < 300) for row in SD_Apartments[['latitude', 'longitude']])])
如果运行它并打印 SD_Apartments,您将看到 SD_Apartments 如下所示:
name ... coffee_count
0 DreamAPT ... <generator object <genexpr> at 0x000002E178849...
1 OKAPT ... NaN
2 BadAPT ... NaN
最佳答案
这可能会对您有所帮助:
import pandas as pd
df = pd.DataFrame({'geodesic': [1, 10, 8, 11, 20,2,2],'apartment': list('aaceeee')})
df.nsmallest(3, 'geodesic')
执行此操作的另一种方法是使用测地距离使用 K 最近邻
:
关于python - 计算一定距离内的位置数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57258972/