групповой стройный тип в геопандах - PullRequest
1 голос
/ 30 марта 2020

У меня есть гео pandas фрейм данных с полем геом, который сохраняет гетерогенные стройные типы данных. Я хочу сгруппировать их по типу (например, shapely.geometry.Point, shapely.geometry.Polygon, shapely.geometry.MultiPolygon и др. c.). Эта задача может быть выполнена с помощью чего-то вроде этого:

main_gdf_clean['geometry'].groupby(by=shapely.geometry.Point)

Есть ли реальный способ выполнить sh то, что я описываю?

1 Ответ

2 голосов
/ 30 марта 2020

GeoSeries.geom_type

группирует тип геометрии (df['geometry'].geom_type) вместо фактической геометрии.

import geopandas as gpd
from shapely.geometry import Polygon, Point

df  = gpd.GeoSeries([Polygon([(1,1), (3,1), (3,3), (1,3)]),
                     Polygon([(3,3), (5,3), (5,5), (3,5)]),
                     Point(1,2), Point(2,3), Point(3,3)]).to_frame('geometry')
df = df.set_geometry(col='geometry')  # So this example knows geometry

# Broadcast # of elements per unique shape type
df['N_items'] = df.groupby(df['geometry'].geom_type).transform('count')
#                                            geometry  N_items
#0  POLYGON ((1.00000 1.00000, 3.00000 1.00000, 3....        2
#1  POLYGON ((3.00000 3.00000, 5.00000 3.00000, 5....        2
#2                            POINT (1.00000 2.00000)        3
#3                            POINT (2.00000 3.00000)        3
#4                            POINT (3.00000 3.00000)        3
...