如何在我的 geopandas 项目中获得正确的组?

How to get a correct group in my geopandas project?

提问人:forestbat 提问时间:7/30/2022 最后编辑:Michael Delgadoforestbat 更新时间:7/31/2022 访问量:100

问:

我正在制作一个项目,该项目可以找到与点或单个点最近的线串(模拟河流),如下所示:

linestrings  points
linestring1  point1    
linestring2  point4     
linestring1  point2    
linestring2  point5
linestring1  point3    
linestring2  point6

在 intellij 想法中,它看起来像这样:enter image description here

我想按线串对数据帧进行分组以插入点,如下所示:

linestrings  points
linestring1  point1    
linestring1  point2   
linestring1  point3    
linestring2  point4
linestring2  point5   
linestring2  point6

这样我就可以将 linestring1 捕捉到点 1、2、3 等。

看这张图,同一个线串应该在3个点上捕捉:image of joined geodataframe

但是,当我启动代码时,我只能看到 DataFrame 形式的 dtypes:

enter image description here

组如下所示:

enter image description here

很明显,我的努力失败了,在 pandas 的文档中,正确的组应该是这样的:https://pandas.pydata.org/docs/user_guide/groupby.html#dataframe-column-selection-in-groupby

那么我的问题是什么,我该如何解决呢?

这是我代码的一部分:

list_point_line_tuple = []
    for point in gpd_nodes_df.geometry:
        list_point_line_tuple.append((point.to_wkt(), geopandas_min_dist(point, gpd_network_df, 200).geometry.to_wkt()))
    graph_frame = gpd.GeoDataFrame(list_point_line_tuple, columns=['near_stations', 'nearest_line'])
    grouped_graph_frame = graph_frame.groupby('nearest_line', as_index=False)

所有代码都在这里:https://github.com/forestbat/stream-simulate-conda

Python Pandas Group-by Geopandas

评论

0赞 Michael Delgado 7/31/2022
提问时,请不要发布代码、数据或错误的图片。相反,请将它们作为格式化文本块包含在内。只要有可能,尝试使用代码生成小数据示例,以形成一个最小的可重现示例。但是,即使您询问的是现有的数据结构,也要将结果粘贴为代码块,而不是发布图像。谢谢!print(df)

答:

1赞 Michael Delgado 7/31/2022 #1

您根本无法对几何图形进行分组。它们不可散列,不能用作 pandas 索引。相反,请使用 Geopandas 的空间连接工具,例如 geopandas.sjoin_nearest

merged = geopandas.sjoin_nearest(points_geodataframe, lines_geodataframe, how='left')

有关详细信息,请参阅有关空间连接的 geopandas 文档。