[Spatial join][1] should work. You must have been using 'inner' join type? > ‘inner’: use intersection of keys from both dfs; retain only left_df > geometry column df = gpd.sjoin(foodf, baadf, how='left') `how='left'` should give you the results you want. I just tried it on two df with ~200k Points in each and it finishes in 30 seconds: [![enter image description here][2]][2] [1]: https://geopandas.org/reference/geopandas.sjoin.html [2]: https://i.sstatic.net/GSEET.jpg