簡體   English   中英

使用 groupby 和 lambda 將 Pandas DataFrame 轉換為帶有多邊形幾何的 GeoDataFrame

[英]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_xloc_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM