【发布时间】:2020-06-07 01:34:56
【问题描述】:
我有一个 geopandas 数据框,其中包含一系列形状优美的 POINT 几何图形。还有另一列包含 ID 列表,指定每个点属于哪个唯一多边形。简化的输入代码是:
import pandas as pd
from shapely.geometry import Point, LineString, Polygon
from geopandas import GeoDataFrame
data = [[1,10,10],[1,15,20],[1,20,10],[2,30,30],[2,35,40],[2,40,30]]
df_poly = pd.DataFrame(data, columns = ['poly_ID','lon', 'lat'])
geometry = [Point(xy) for xy in zip(df_poly.lon, df_poly.lat)]
geodf_poly = GeoDataFrame(df_poly, geometry=geometry)
geodf_poly.head()
我想按 poly_ID 进行分组,以便将几何图形从 POINT 转换为 POLYGON。这个输出基本上看起来像:
poly_ID geometry
1 POLYGON ((10 10, 15 20, 20 10))
2 POLYGON ((30 30, 35 40, 40 30))
我想这很简单,但我无法让它发挥作用。我发现以下代码允许我将其转换为开放式多段线,但无法弄清楚多边形。谁能建议如何适应这个?
geodf_poly = geodf_poly.groupby(['poly_ID'])['geometry'].apply(lambda x: LineString(x.tolist()))
简单地将 LineString 替换为 Polygon 会导致 TypeError:'Point' 类型的对象没有 len()
【问题讨论】:
-
您可以将您的输入和预期输出作为文本而不是图片发布吗?
-
谢谢@moys。我已在原始问题中添加了输入和所需的输出文本/代码。
标签: pandas pandas-groupby geopandas