Making rows of points in dataframe into POLYGON using geopandas

I am trying to finding out if points are in closed polygons (in this question: Finding if a point in a dataframe is in a polygon and assigning polygon name to point) but I realized that there might be another way to do this:

I have this dataframe

df=
id     x_zone     y_zone
0  A1  65.422080  48.147850
1  A1  46.635708  51.165745
2  A1  46.597984  47.657444
3  A1  68.477700  44.073700
4  A3  46.635708  54.108190
5  A3  46.635708  51.844770
6  A3  63.309560  48.826878
7  A3  62.215572  54.108190

and I would like to transform this into

id     Polygon
0  A1  POLYGON((65.422080, 48.147850), (46.635708,  51.165745), (46.597984,  47.657444), (68.477700,  44.073700))
1  A3  POLYGON((46.635708,54.108190), (46.635708 ,51.844770), (63.309560, 48.826878),(62.215572 , 54.108190))

and do the same for points:

df1= 

 item   x   y
0     1  50  49
1     2  60  53
2     3  70  30

to

item   point
0     1  POINT(50,49)
1     2  POINT(60,53)
2     3  POINT(70,30)

I have never used geopandas and am a little at a loss here.

My question is thus: How do I get from a pandas dataframe to a dataframe with geopandas attributes?

Thankful for any insight!

Upvotes: 2

Views: 1649

Answers (2)

TLouf
TLouf

Reputation: 101

I'd suggest the following to directly get a GeoDataFrame from your df:

from shapely.geometry import Polygon
import geopandas as gpd
gdf = gpd.GeoDataFrame(
    geometry=df.groupby('name').apply(
        lambda g: Polygon(gpd.points_from_xy(g['x_zone'], g['y_zone']))
    )
)

It first creates a list of points using geopandas' points_from_xy, then create a Polygon object from this list.

Upvotes: 4

wwnde
wwnde

Reputation: 26676

You can achieve as follows but you would have to set the right dtype. I know in ArcGIS you have to set the dtype as geometry;

df.groupby('id').apply(lambda x: 'POLYGON(' + str(tuple(zip(x['x_zone'],x['y_zone'])))+')')

Upvotes: 2

Related Questions