使用groupby和lambda生成带Polygon及拼接name列的GeoDataFrame
实现方案
你可以在groupby的apply回调中同时返回拼接后的name和几何对象,再转为GeoDataFrame即可,完整代码如下:
import pandas as pd import geopandas as gpd from shapely.geometry import Polygon # 按grp_name分组,同时计算拼接name和Polygon几何 group_res = df.groupby('grp_name').apply(lambda g: pd.Series({ 'name': '|'.join(g['name']), 'geometry': Polygon(gpd.points_from_xy(g['loc_x'], g['loc_y'])) })) # 显式指定geometry列转为GeoDataFrame gdf = gpd.GeoDataFrame(group_res, geometry='geometry')
运行后得到的gdf索引就是分组键grp_name的值,完全符合你需要的输出格式。
注意事项
Polygon要求至少3个坐标点才能正常生成,如果你的分组存在点数小于3的情况,可以在lambda中加判断兼容:
lambda g: pd.Series({ 'name': '|'.join(g['name']), 'geometry': Polygon(gpd.points_from_xy(g['loc_x'], g['loc_y'])) if len(g)>=3 else None })
内容的提问来源于stack exchange,提问作者S_S
相关产品推荐
相关产品推荐

