我有一个大约550000个数据点的数据块,其中包括经度和纬度。 现在我想确定在哪个区域块中包含该行中的点。共有六个区域块,彼此不重叠,我已将其编码为geopandas“几何体”,如下所示:
TMA ... geometry
0 TMA1 ... POLYGON ((5.33333 52.80556, 5.60944 52.50750, ...
1 TMA2 ... POLYGON ((4.11806 52.90028, 4.35000 52.80528, ...
2 TMA3 ... POLYGON ((5.07333 52.19583, 5.11944 52.20528, ...
3 TMA4 ... POLYGON ((5.11944 52.20528, 5.41972 52.26556, ...
4 TMA5 ... POLYGON ((5.41972 52.26556, 5.60944 52.30306, ...
5 TMA6 ... POLYGON ((4.35000 52.80528, 4.46750 52.75694, ...
[6 rows x 4 columns]
为了用正确的面积(TMA)值填充数据帧,我编写了以下代码:
df1['point'] = gp.points_from_xy(df1['LON'],df1['LAT'])
df1['TMA'] = 99
for i in range(0, len(df1)):
for j in range(0,6):
if Schiphol_TMA['geometry'][j].contains(df1['point'][i]):
df1['TMA'][i] = j+1
然而,这需要大量的时间。 有没有一种更聪明的编码方法来加速这个过程? (是的,我读过“从不在数据帧上迭代”等)。编辑:也许列表理解可以在这里发挥作用,但是我太初学了,无法完全理解那里发生的事情
上述例程(包括
break
命令):以上时间为86.8秒(在Google Colab上)
当我使用列表理解重写以下代码时:
这个新的程序花了45.9秒。大约一半。 我开始学习。。。 也许这可以做得更快
又是我。我又发现了一个进步。 大部分点(330.000)位于6个区域之外。因此,我首先用以下方法创建6个区域的轮廓:
然后修改例程以仅在点位于轮廓内时进行检查:
使用的时间现在减少到15.6秒!骄傲
相关问题 更多 >
编程相关推荐