From 7f486db671873d29cfb2d59afff9f5fd48ea0076 Mon Sep 17 00:00:00 2001 From: Adrian Garcia Badaracco <1755071+adriangb@users.noreply.github.com> Date: Mon, 23 Aug 2021 16:08:14 -0500 Subject: [PATCH] BUG: Use suffixes in sjoin's how==right branch (#2065) * Use suffixes in how==right * add tests * slightly nicer formatting * slightly nicer formatting * add , * Update test_sjoin.py * Update test_sjoin.py Co-authored-by: Martin Fleischmann --- geopandas/tools/sjoin.py | 1 + geopandas/tools/tests/test_sjoin.py | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/geopandas/tools/sjoin.py b/geopandas/tools/sjoin.py index da5b94c..e1a4b8d 100644 --- a/geopandas/tools/sjoin.py +++ b/geopandas/tools/sjoin.py @@ -319,6 +319,7 @@ def _frame_join(indices, left_df, right_df, how, lsuffix, rsuffix): left_index=True, right_on="_key_left", how="right", + suffixes=("_{}".format(lsuffix), "_{}".format(rsuffix)), ) .set_index(index_right) .drop(["_key_left", "_key_right"], axis=1) diff --git a/geopandas/tools/tests/test_sjoin.py b/geopandas/tools/tests/test_sjoin.py index 107d270..b18f6d4 100644 --- a/geopandas/tools/tests/test_sjoin.py +++ b/geopandas/tools/tests/test_sjoin.py @@ -89,6 +89,23 @@ def dfs(request): class TestSpatialJoin: + @pytest.mark.parametrize( + "how, lsuffix, rsuffix, expected_cols", + [ + ("left", "left", "right", {"col_left", "col_right", "index_right"}), + ("inner", "left", "right", {"col_left", "col_right", "index_right"}), + ("right", "left", "right", {"col_left", "col_right", "index_left"}), + ("left", "lft", "rgt", {"col_lft", "col_rgt", "index_rgt"}), + ("inner", "lft", "rgt", {"col_lft", "col_rgt", "index_rgt"}), + ("right", "lft", "rgt", {"col_lft", "col_rgt", "index_lft"}), + ], + ) + def test_suffixes(self, how: str, lsuffix: str, rsuffix: str, expected_cols): + left = GeoDataFrame({"col": [1], "geometry": [Point(0, 0)]}) + right = GeoDataFrame({"col": [1], "geometry": [Point(0, 0)]}) + joined = sjoin(left, right, how=how, lsuffix=lsuffix, rsuffix=rsuffix) + assert set(joined.columns) == expected_cols | set(("geometry",)) + @pytest.mark.parametrize("dfs", ["default-index", "string-index"], indirect=True) def test_crs_mismatch(self, dfs): index, df1, df2, expected = dfs