我对 GeoPandas (0.5.1) 的函数 sjoin 有疑问。 事实上,当我在同一个 GeoDataFrame 上尝试此函数时,结果是一个包含比我预期更多结果的表。
我正在运行这个小代码:
gpd.sjoin(l.frame, l.frame, op='intersects', how='left')
我使用的框架包含:
id geometry
0 LINESTRING (-44500.48827615567 888412.75133248...
1 LINESTRING (17219.37750674287 1117318.84695587...
结果是:
id_left geometry index_right \
0 0 LINESTRING (-44500.48827615567 888412.75133248... 0
0 0 LINESTRING (-44500.48827615567 888412.75133248... 1
1 1 LINESTRING (17219.37750674287 1117318.84695587... 0
1 1 LINESTRING (17219.37750674287 1117318.84695587... 1
id_right
0 0
0 1
为什么结果表中只有前 2 行?
谢谢
最佳答案
最明显的原因是以下数据帧中的行相交。
您可以通过以下方式检查:
gdf.geometry.iloc[0].intersects(gdf.geometry.iloc[1])
如果返回True
,则生成的数据框只会显示数据框的每一行与其他行相交。
请记住,每个对象都与自身相交。
要删除这些内容,请添加以下内容:
result = result.loc[result.id_left.ne(result.id_right)]
关于python - geopandas 对 sjoin 函数的误解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57458330/