我试图找出所有位于坐标系100米范围内的观测值。
我有两个 Dataframe ,Dataframe1有400行坐标,对于每一行,我需要找到Dataframe2中位于该位置100米范围内的所有观测值,并对它们进行计数。
两个 Dataframe 的格式如下:
| Y | X | observations_within100m |
|:----:|:----:|:-------------------------:|
|100 |100 | 22 |
|110 |105 | 25 |
|110 |102 | 11 |
我正在寻找最有效的方法来完成这个计算,因为dataframe2有超过200000个居住地,我知道它可以通过应用一个距离函数和一个for循环来完成,但是我想知道这里最好的方法是什么。
2条答案
按热度按时间uujelgoq1#
除了我的评论,一个肮脏的快速方法,比for循环好得多,就是找到df1中每个X,Y给定的中心形成的圆中的点。
你可以试试这个:
您可以看到,位于所需距离处的点必须遵守方程
(x-x1)^2 + (y-y1)^2 <= distance^2
当然,有几个优化,你可以应用在这之上,像你不需要搜索整个df2,但只有它的某一部分等。
mitkmikd2#
如果你正在处理的区域很小,你可以把所有已知的位置做成一个网格,然后为每个点预先计算一个列表,列出df 1中距离该点100米以内的条目。
步骤2将遍历200 k行df 2,并且相应地增加在该点处找到的df 1条目的计数。
否则,这个问题就类似于碰撞检测,可能会有智能的实现。例如pygame就有一个,但不知道有多高效。根据区域的稀疏程度,通过将其划分为单元格可能会有好处,所以你只需要检测该单元格中条目的碰撞/距离,从400个对象减少到200 k中的每一个。
希望答案是有帮助的,祝你好运!