【发布时间】:2020-08-05 02:54:03
【问题描述】:
我目前正在尝试遍历经纬度点的 .csv 文件,计算一对之间的距离,然后检查其中一个点是否存在于另一个 .csv 文件中。目前我将每个 .csv 文件放入熊猫数据框中。我下面的内容有效,但考虑到文件中的项目数量(~19k),需要的时间太长。我不确定问题是出在我迭代的方式上,还是出在我第一次使用 pandas/大型数据集时写入输出文件的方式上。
for index1,row1 in iDF.iterrows():
site1 = getattr(row1, 'site1')
neighbors = nDF[nDF.column1 == rach1].to_list()
for index2, row2 in iDF.loc[index1+1:maxRow-1].iterrows():
site2 = getattr(row2, 'site1')
dist = geopy.great_circle((getattr(row1, 'lat'), getattr(row1, 'long')),
(getattr(row2, 'lat'), getattr(row2, 'long'))).miles
if dist < 3:
if item2 in neighbors:
neighbor = "Y"
else:
neighbor = ""
oDF = oDF.append({'site1': item1, 'site2': item2, 'distance': dist, 'neighbor': neighbor}, ignore_index=True)
oDF.to_excel(oFileName, 'Sheet1', index=False)
示例输入数据框
site1 state lat long misc1 misc2
san jose CA 32.3843 -99.25942 0 1
chicago IL 25.6449 -98.2424 0 1
boston MA 53.344 -92.3434 0 1
san francsico CA 32.4932 -97.3450 0 1
示例邻居数据框
site1 site2
san jose san francisco
预期输出
site1 site2 distance neighbor
san jose san francisco 50 Y
san jose chicago 1000 N
san jose boston 1300 N
chicago boston 300 N
chicago san francisco 1050 N
boston san francisco 1350 N
【问题讨论】:
-
1) 你用的是什么距离函数? 2)您的示例 DataFrames 似乎不对应。您是在寻找输入 DataFrame 中城市的每个组合,还是只寻找输出 DataFrame 中指定的城市。
-
抱歉,刚刚更新了数据框以更好地反映预期的输出。我现在已经修改为使用 geopy 中的 great_circle 函数
-
欢迎您!显然,您已经有了一个邻居列表,并且想要了解他们之间的距离。不要在 iDF 上循环,而是从 nDF 中创建一个对列表,包括具有该对每一侧的 gps 位置的列,并像 answer 中那样对距离函数进行矢量化