[英]Pandas DataFrame to GeoDataFrame with Polygon geometry using groupby and lambda
我有一個像這樣的熊貓數據DataFrame
name loc_x loc_y grp_name
a1 1.0 2.0 set1
a2 2.0 3.0 set1
a3 3.2 4.1 set2
a4 7.9 4.2 set2
我想生成一個GeoDataFrame
產生一個polygon
使用loc_x
和loc_y
在分組grp_name
,也包括列name
已在通過級聯我的原始數據幀值|
? 結果應該是這樣的
name geometry
set1 a1|a2 POLYGON ((1.0, 2.0)...)
set2 a3|a4 POLYGON ((3.2, 4.1)...)
我這樣做是為了獲取幾何列,但如何從我的基本數據框中獲取name
連接的附加列?
gdf = gpd.GeoDataFrame(geometry=df.groupby('grp_name').apply(
lambda g: Polygon(gpd.points_from_xy(g['loc_x'], g['loc_y']))))
groupby().apply()
為每個組提供對數據幀的引用。 然后很容易構建每組所需的兩個輸出import pandas as pd
import geopandas as gpd
import shapely.geometry
import io
df = pd.read_csv(io.StringIO("""name loc_x loc_y grp_name
a1 1.0 2.0 set1
a2 2.0 3.0 set1
a2.5 3.0 4.0 set1
a3 3.2 4.1 set2
a4 7.9 4.2 set2
a4.5 8.1 4.3 set2"""),sep="\s+",)
gpd.GeoDataFrame(
df.groupby("grp_name").apply(
lambda d: pd.Series(
{
"name": "|".join(d["name"].tolist()),
"geometry": shapely.geometry.Polygon(
d.loc[:, ["loc_x", "loc_y"]].values
),
}
)
)
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.