[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