{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Spatial Joins\n", "\n", "A *spatial join* uses [binary predicates](http://toblerity.org/shapely/manual.html#binary-predicates) \n", "such as `intersects` and `crosses` to combine two `GeoDataFrames` based on the spatial relationship \n", "between their geometries.\n", "\n", "A common use case might be a spatial join between a point layer and a polygon layer where you want to retain the point geometries and grab the attributes of the intersecting polygons.\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "ExecuteTime": { "end_time": "2017-12-15T21:26:04.391570Z", "start_time": "2017-12-15T21:26:04.361570Z" } }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.core.display import Image \n", "Image(url='https://web.natur.cuni.cz/~langhamr/lectures/vtfg1/mapinfo_1/about_gis/Image23.gif') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "## Types of spatial joins\n", "\n", "We currently support the following methods of spatial joins. We refer to the *left_df* and *right_df* which are the correspond to the two dataframes passed in as args.\n", "\n", "### Left outer join\n", "\n", "In a LEFT OUTER JOIN (`how='left'`), we keep *all* rows from the left and duplicate them if necessary to represent multiple hits between the two dataframes. We retain attributes of the right if they intersect and lose right rows that don't intersect. A left outer join implies that we are interested in retaining the geometries of the left. \n", "\n", "This is equivalent to the PostGIS query:\n", "```\n", "SELECT pts.geom, pts.id as ptid, polys.id as polyid \n", "FROM pts\n", "LEFT OUTER JOIN polys\n", "ON ST_Intersects(pts.geom, polys.geom);\n", "\n", " geom | ptid | polyid \n", "--------------------------------------------+------+--------\n", " 010100000040A9FBF2D88AD03F349CD47D796CE9BF | 4 | 10\n", " 010100000048EABE3CB622D8BFA8FBF2D88AA0E9BF | 3 | 10\n", " 010100000048EABE3CB622D8BFA8FBF2D88AA0E9BF | 3 | 20\n", " 0101000000F0D88AA0E1A4EEBF7052F7E5B115E9BF | 2 | 20\n", " 0101000000818693BA2F8FF7BF4ADD97C75604E9BF | 1 | \n", "(5 rows)\n", "```\n", "\n", "### Right outer join\n", "\n", "In a RIGHT OUTER JOIN (`how='right'`), we keep *all* rows from the right and duplicate them if necessary to represent multiple hits between the two dataframes. We retain attributes of the left if they intersect and lose left rows that don't intersect. A right outer join implies that we are interested in retaining the geometries of the right. \n", "\n", "This is equivalent to the PostGIS query:\n", "```\n", "SELECT polys.geom, pts.id as ptid, polys.id as polyid \n", "FROM pts\n", "RIGHT OUTER JOIN polys\n", "ON ST_Intersects(pts.geom, polys.geom);\n", "\n", " geom | ptid | polyid \n", "----------+------+--------\n", " 01...9BF | 4 | 10\n", " 01...9BF | 3 | 10\n", " 02...7BF | 3 | 20\n", " 02...7BF | 2 | 20\n", " 00...5BF | | 30\n", "(5 rows)\n", "```\n", "\n", "### Inner join\n", "\n", "In an INNER JOIN (`how='inner'`), we keep rows from the right and left only where their binary predicate is `True`. We duplicate them if necessary to represent multiple hits between the two dataframes. We retain attributes of the right and left only if they intersect and lose all rows that do not. An inner join implies that we are interested in retaining the geometries of the left. \n", "\n", "This is equivalent to the PostGIS query:\n", "```\n", "SELECT pts.geom, pts.id as ptid, polys.id as polyid \n", "FROM pts\n", "INNER JOIN polys\n", "ON ST_Intersects(pts.geom, polys.geom);\n", "\n", " geom | ptid | polyid \n", "--------------------------------------------+------+--------\n", " 010100000040A9FBF2D88AD03F349CD47D796CE9BF | 4 | 10\n", " 010100000048EABE3CB622D8BFA8FBF2D88AA0E9BF | 3 | 10\n", " 010100000048EABE3CB622D8BFA8FBF2D88AA0E9BF | 3 | 20\n", " 0101000000F0D88AA0E1A4EEBF7052F7E5B115E9BF | 2 | 20\n", "(4 rows) \n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Spatial Joins between two GeoDataFrames\n", "\n", "Let's take a look at how we'd implement these using `GeoPandas`. First, load up the NYC test data into `GeoDataFrames`:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2017-12-15T21:26:07.191542Z", "start_time": "2017-12-15T21:26:04.391570Z" } }, "outputs": [], "source": [ "%matplotlib inline\n", "from shapely.geometry import Point\n", "from geopandas import datasets, GeoDataFrame, read_file\n", "from geopandas.tools import overlay\n", "\n", "# NYC Boros\n", "zippath = datasets.get_path('nybb')\n", "polydf = read_file(zippath)\n", "\n", "# Generate some points\n", "b = [int(x) for x in polydf.total_bounds]\n", "N = 8\n", "pointdf = GeoDataFrame([\n", " {'geometry': Point(x, y), 'value1': x + y, 'value2': x - y}\n", " for x, y in zip(range(b[0], b[2], int((b[2] - b[0]) / N)),\n", " range(b[1], b[3], int((b[3] - b[1]) / N)))])\n", "\n", "# Make sure they're using the same projection reference\n", "pointdf.crs = polydf.crs" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2017-12-15T21:26:07.211542Z", "start_time": "2017-12-15T21:26:07.191542Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
geometryvalue1value2
0POINT (913175 120121)1033296793054
1POINT (932450 139211)1071661793239
2POINT (951725 158301)1110026793424
3POINT (971000 177391)1148391793609
4POINT (990275 196481)1186756793794
5POINT (1009550 215571)1225121793979
6POINT (1028825 234661)1263486794164
7POINT (1048100 253751)1301851794349
8POINT (1067375 272841)1340216794534
\n", "
" ], "text/plain": [ " geometry value1 value2\n", "0 POINT (913175 120121) 1033296 793054\n", "1 POINT (932450 139211) 1071661 793239\n", "2 POINT (951725 158301) 1110026 793424\n", "3 POINT (971000 177391) 1148391 793609\n", "4 POINT (990275 196481) 1186756 793794\n", "5 POINT (1009550 215571) 1225121 793979\n", "6 POINT (1028825 234661) 1263486 794164\n", "7 POINT (1048100 253751) 1301851 794349\n", "8 POINT (1067375 272841) 1340216 794534" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pointdf" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2017-12-15T21:26:07.921534Z", "start_time": "2017-12-15T21:26:07.211542Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
BoroCodeBoroNameShape_LengShape_Areageometry
05Staten Island330470.0103321.623820e+09(POLYGON ((970217.0223999023 145643.3322143555...
14Queens896344.0477633.045213e+09(POLYGON ((1029606.076599121 156073.8142089844...
23Brooklyn741080.5231661.937479e+09(POLYGON ((1021176.479003906 151374.7969970703...
31Manhattan359299.0964716.364715e+08(POLYGON ((981219.0557861328 188655.3157958984...
42Bronx464392.9918241.186925e+09(POLYGON ((1012821.805786133 229228.2645874023...
\n", "
" ], "text/plain": [ " BoroCode BoroName Shape_Leng Shape_Area \\\n", "0 5 Staten Island 330470.010332 1.623820e+09 \n", "1 4 Queens 896344.047763 3.045213e+09 \n", "2 3 Brooklyn 741080.523166 1.937479e+09 \n", "3 1 Manhattan 359299.096471 6.364715e+08 \n", "4 2 Bronx 464392.991824 1.186925e+09 \n", "\n", " geometry \n", "0 (POLYGON ((970217.0223999023 145643.3322143555... \n", "1 (POLYGON ((1029606.076599121 156073.8142089844... \n", "2 (POLYGON ((1021176.479003906 151374.7969970703... \n", "3 (POLYGON ((981219.0557861328 188655.3157958984... \n", "4 (POLYGON ((1012821.805786133 229228.2645874023... " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "polydf" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2017-12-15T21:26:08.271531Z", "start_time": "2017-12-15T21:26:07.921534Z" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nSMoAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pointdf.plot()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2017-12-15T21:26:10.561508Z", "start_time": "2017-12-15T21:26:08.271531Z" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nyQAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "polydf.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Joins" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2017-12-15T21:26:12.951484Z", "start_time": "2017-12-15T21:26:10.561508Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
geometryvalue1value2index_rightBoroCodeBoroNameShape_LengShape_Area
0POINT (913175 120121)1033296793054NaNNaNNaNNaNNaN
1POINT (932450 139211)10716617932390.05.0Staten Island330470.0103321.623820e+09
2POINT (951725 158301)11100267934240.05.0Staten Island330470.0103321.623820e+09
3POINT (971000 177391)1148391793609NaNNaNNaNNaNNaN
4POINT (990275 196481)1186756793794NaNNaNNaNNaNNaN
5POINT (1009550 215571)12251217939791.04.0Queens896344.0477633.045213e+09
6POINT (1028825 234661)12634867941644.02.0Bronx464392.9918241.186925e+09
7POINT (1048100 253751)1301851794349NaNNaNNaNNaNNaN
8POINT (1067375 272841)1340216794534NaNNaNNaNNaNNaN
\n", "
" ], "text/plain": [ " geometry value1 value2 index_right BoroCode \\\n", "0 POINT (913175 120121) 1033296 793054 NaN NaN \n", "1 POINT (932450 139211) 1071661 793239 0.0 5.0 \n", "2 POINT (951725 158301) 1110026 793424 0.0 5.0 \n", "3 POINT (971000 177391) 1148391 793609 NaN NaN \n", "4 POINT (990275 196481) 1186756 793794 NaN NaN \n", "5 POINT (1009550 215571) 1225121 793979 1.0 4.0 \n", "6 POINT (1028825 234661) 1263486 794164 4.0 2.0 \n", "7 POINT (1048100 253751) 1301851 794349 NaN NaN \n", "8 POINT (1067375 272841) 1340216 794534 NaN NaN \n", "\n", " BoroName Shape_Leng Shape_Area \n", "0 NaN NaN NaN \n", "1 Staten Island 330470.010332 1.623820e+09 \n", "2 Staten Island 330470.010332 1.623820e+09 \n", "3 NaN NaN NaN \n", "4 NaN NaN NaN \n", "5 Queens 896344.047763 3.045213e+09 \n", "6 Bronx 464392.991824 1.186925e+09 \n", "7 NaN NaN NaN \n", "8 NaN NaN NaN " ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from geopandas.tools import sjoin\n", "join_left_df = sjoin(pointdf, polydf, how=\"left\")\n", "join_left_df\n", "# Note the NaNs where the point did not intersect a boro" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2017-12-15T21:26:13.871475Z", "start_time": "2017-12-15T21:26:12.951484Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
index_leftvalue1value2BoroCodeBoroNameShape_LengShape_Areageometry
index_right
01.01071661.0793239.05Staten Island330470.0103321.623820e+09(POLYGON ((970217.0223999023 145643.3322143555...
02.01110026.0793424.05Staten Island330470.0103321.623820e+09(POLYGON ((970217.0223999023 145643.3322143555...
15.01225121.0793979.04Queens896344.0477633.045213e+09(POLYGON ((1029606.076599121 156073.8142089844...
46.01263486.0794164.02Bronx464392.9918241.186925e+09(POLYGON ((1012821.805786133 229228.2645874023...
2NaNNaNNaN3Brooklyn741080.5231661.937479e+09(POLYGON ((1021176.479003906 151374.7969970703...
3NaNNaNNaN1Manhattan359299.0964716.364715e+08(POLYGON ((981219.0557861328 188655.3157958984...
\n", "
" ], "text/plain": [ " index_left value1 value2 BoroCode BoroName \\\n", "index_right \n", "0 1.0 1071661.0 793239.0 5 Staten Island \n", "0 2.0 1110026.0 793424.0 5 Staten Island \n", "1 5.0 1225121.0 793979.0 4 Queens \n", "4 6.0 1263486.0 794164.0 2 Bronx \n", "2 NaN NaN NaN 3 Brooklyn \n", "3 NaN NaN NaN 1 Manhattan \n", "\n", " Shape_Leng Shape_Area \\\n", "index_right \n", "0 330470.010332 1.623820e+09 \n", "0 330470.010332 1.623820e+09 \n", "1 896344.047763 3.045213e+09 \n", "4 464392.991824 1.186925e+09 \n", "2 741080.523166 1.937479e+09 \n", "3 359299.096471 6.364715e+08 \n", "\n", " geometry \n", "index_right \n", "0 (POLYGON ((970217.0223999023 145643.3322143555... \n", "0 (POLYGON ((970217.0223999023 145643.3322143555... \n", "1 (POLYGON ((1029606.076599121 156073.8142089844... \n", "4 (POLYGON ((1012821.805786133 229228.2645874023... \n", "2 (POLYGON ((1021176.479003906 151374.7969970703... \n", "3 (POLYGON ((981219.0557861328 188655.3157958984... " ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "join_right_df = sjoin(pointdf, polydf, how=\"right\")\n", "join_right_df\n", "# Note Staten Island is repeated" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "ExecuteTime": { "end_time": "2017-12-15T21:26:13.961474Z", "start_time": "2017-12-15T21:26:13.881475Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
geometryvalue1value2index_rightBoroCodeBoroNameShape_LengShape_Area
1POINT (932450 139211)107166179323905Staten Island330470.0103321.623820e+09
2POINT (951725 158301)111002679342405Staten Island330470.0103321.623820e+09
5POINT (1009550 215571)122512179397914Queens896344.0477633.045213e+09
6POINT (1028825 234661)126348679416442Bronx464392.9918241.186925e+09
\n", "
" ], "text/plain": [ " geometry value1 value2 index_right BoroCode \\\n", "1 POINT (932450 139211) 1071661 793239 0 5 \n", "2 POINT (951725 158301) 1110026 793424 0 5 \n", "5 POINT (1009550 215571) 1225121 793979 1 4 \n", "6 POINT (1028825 234661) 1263486 794164 4 2 \n", "\n", " BoroName Shape_Leng Shape_Area \n", "1 Staten Island 330470.010332 1.623820e+09 \n", "2 Staten Island 330470.010332 1.623820e+09 \n", "5 Queens 896344.047763 3.045213e+09 \n", "6 Bronx 464392.991824 1.186925e+09 " ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "join_inner_df = sjoin(pointdf, polydf, how=\"inner\")\n", "join_inner_df\n", "# Note the lack of NaNs; dropped anything that didn't intersect" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We're not limited to using the `intersection` binary predicate. Any of the `Shapely` geometry methods that return a Boolean can be used by specifying the `op` kwarg." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "ExecuteTime": { "end_time": "2017-12-15T21:26:14.191472Z", "start_time": "2017-12-15T21:26:13.961474Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
geometryvalue1value2index_rightBoroCodeBoroNameShape_LengShape_Area
0POINT (913175 120121)1033296793054NaNNaNNaNNaNNaN
1POINT (932450 139211)10716617932390.05.0Staten Island330470.0103321.623820e+09
2POINT (951725 158301)11100267934240.05.0Staten Island330470.0103321.623820e+09
3POINT (971000 177391)1148391793609NaNNaNNaNNaNNaN
4POINT (990275 196481)1186756793794NaNNaNNaNNaNNaN
5POINT (1009550 215571)12251217939791.04.0Queens896344.0477633.045213e+09
6POINT (1028825 234661)12634867941644.02.0Bronx464392.9918241.186925e+09
7POINT (1048100 253751)1301851794349NaNNaNNaNNaNNaN
8POINT (1067375 272841)1340216794534NaNNaNNaNNaNNaN
\n", "
" ], "text/plain": [ " geometry value1 value2 index_right BoroCode \\\n", "0 POINT (913175 120121) 1033296 793054 NaN NaN \n", "1 POINT (932450 139211) 1071661 793239 0.0 5.0 \n", "2 POINT (951725 158301) 1110026 793424 0.0 5.0 \n", "3 POINT (971000 177391) 1148391 793609 NaN NaN \n", "4 POINT (990275 196481) 1186756 793794 NaN NaN \n", "5 POINT (1009550 215571) 1225121 793979 1.0 4.0 \n", "6 POINT (1028825 234661) 1263486 794164 4.0 2.0 \n", "7 POINT (1048100 253751) 1301851 794349 NaN NaN \n", "8 POINT (1067375 272841) 1340216 794534 NaN NaN \n", "\n", " BoroName Shape_Leng Shape_Area \n", "0 NaN NaN NaN \n", "1 Staten Island 330470.010332 1.623820e+09 \n", "2 Staten Island 330470.010332 1.623820e+09 \n", "3 NaN NaN NaN \n", "4 NaN NaN NaN \n", "5 Queens 896344.047763 3.045213e+09 \n", "6 Bronx 464392.991824 1.186925e+09 \n", "7 NaN NaN NaN \n", "8 NaN NaN NaN " ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sjoin(pointdf, polydf, how=\"left\", op=\"within\")" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.1" } }, "nbformat": 4, "nbformat_minor": 1 }