From a0c0867de2d087dbc16ee15f7d514c9b04e709a3 Mon Sep 17 00:00:00 2001 From: Devjeet Roy Date: Sun, 12 Apr 2020 17:21:05 -0700 Subject: [PATCH 1/4] Added two tests for issue #29697 --- pandas/tests/reshape/merge/test_merge.py | 33 ++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/pandas/tests/reshape/merge/test_merge.py b/pandas/tests/reshape/merge/test_merge.py index 29d3bf302545e..e54c5b94b4a8c 100644 --- a/pandas/tests/reshape/merge/test_merge.py +++ b/pandas/tests/reshape/merge/test_merge.py @@ -645,6 +645,39 @@ def _constructor(self): assert isinstance(result, NotADataFrame) + def test_merge_right_duplicate_suffix(self): + # https://github.com/pandas-dev/pandas/issues/29697 + + left_df = DataFrame({"A": [100, 200, 1], "B": [60, 70, 80]}) + right_df = DataFrame({"A": [100, 200, 300], "B": [600, 700, 800]}) + + result = merge(left_df, right_df, on="A", how="right", suffixes=("_x", "_x")) + expected = DataFrame( + {"A": [100, 200, 300], "B1": [60, 70, np.nan], "B2": [600, 700, 800]} + ) + expected.columns = ["A", "B_x", "B_x"] + + tm.assert_frame_equal(result, expected) + + def test_merge_outer_duplicate_suffix(self): + # https://github.com/pandas-dev/pandas/issues/29697 + + left_df = DataFrame({"A": [100, 200, 1], "B": [60, 70, 80]}) + right_df = DataFrame({"A": [100, 200, 300], "B": [600, 700, 800]}) + + result = merge(left_df, right_df, on="A", how="outer", suffixes=("_x", "_x")) + + expected = DataFrame( + { + "A": [100, 200, 1, 300], + "B1": [60, 70, 80, np.nan], + "B2": [600, 700, np.nan, 800], + } + ) + expected.columns = ["A", "B_x", "B_x"] + + tm.assert_frame_equal(result, expected) + def test_join_append_timedeltas(self): # timedelta64 issues with join/merge # GH 5695 From e1d85b17cfc5a4cabe66243d1d240f3be2cedb4f Mon Sep 17 00:00:00 2001 From: Devjeet Roy Date: Wed, 15 Apr 2020 23:00:29 -0700 Subject: [PATCH 2/4] Switched to pytest.parametrize --- pandas/tests/reshape/merge/test_merge.py | 63 +++++++++++------------- 1 file changed, 30 insertions(+), 33 deletions(-) diff --git a/pandas/tests/reshape/merge/test_merge.py b/pandas/tests/reshape/merge/test_merge.py index e54c5b94b4a8c..79976b75e8a0d 100644 --- a/pandas/tests/reshape/merge/test_merge.py +++ b/pandas/tests/reshape/merge/test_merge.py @@ -645,39 +645,6 @@ def _constructor(self): assert isinstance(result, NotADataFrame) - def test_merge_right_duplicate_suffix(self): - # https://github.com/pandas-dev/pandas/issues/29697 - - left_df = DataFrame({"A": [100, 200, 1], "B": [60, 70, 80]}) - right_df = DataFrame({"A": [100, 200, 300], "B": [600, 700, 800]}) - - result = merge(left_df, right_df, on="A", how="right", suffixes=("_x", "_x")) - expected = DataFrame( - {"A": [100, 200, 300], "B1": [60, 70, np.nan], "B2": [600, 700, 800]} - ) - expected.columns = ["A", "B_x", "B_x"] - - tm.assert_frame_equal(result, expected) - - def test_merge_outer_duplicate_suffix(self): - # https://github.com/pandas-dev/pandas/issues/29697 - - left_df = DataFrame({"A": [100, 200, 1], "B": [60, 70, 80]}) - right_df = DataFrame({"A": [100, 200, 300], "B": [600, 700, 800]}) - - result = merge(left_df, right_df, on="A", how="outer", suffixes=("_x", "_x")) - - expected = DataFrame( - { - "A": [100, 200, 1, 300], - "B1": [60, 70, 80, np.nan], - "B2": [600, 700, np.nan, 800], - } - ) - expected.columns = ["A", "B_x", "B_x"] - - tm.assert_frame_equal(result, expected) - def test_join_append_timedeltas(self): # timedelta64 issues with join/merge # GH 5695 @@ -2057,6 +2024,36 @@ def test_merge_suffix(col1, col2, kwargs, expected_cols): tm.assert_frame_equal(result, expected) +@pytest.mark.parametrize( + "how,expected", + [ + ( + "right", + DataFrame( + {"A": [100, 200, 300], "B1": [60, 70, np.nan], "B2": [600, 700, 800], } + ), + ), + ( + "outer", + DataFrame( + { + "A": [100, 200, 1, 300], + "B1": [60, 70, 80, np.nan], + "B2": [600, 700, np.nan, 800], + } + ), + ), + ], +) +def test_merge_duplicate_suffix(how, expected): + left_df = DataFrame({"A": [100, 200, 1], "B": [60, 70, 80]}) + right_df = DataFrame({"A": [100, 200, 300], "B": [600, 700, 800]}) + result = merge(left_df, right_df, on="A", how=how, suffixes=("_x", "_x")) + expected.columns = ["A", "B_x", "B_x"] + + tm.assert_frame_equal(result, expected) + + @pytest.mark.parametrize( "col1, col2, suffixes", [ From 522bf13e21b4ef7a671a02ad8208bf173963607c Mon Sep 17 00:00:00 2001 From: Devjeet Roy Date: Wed, 15 Apr 2020 23:38:32 -0700 Subject: [PATCH 3/4] Fixed black formatting issue --- pandas/tests/reshape/merge/test_merge.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/tests/reshape/merge/test_merge.py b/pandas/tests/reshape/merge/test_merge.py index 79976b75e8a0d..bb7f8352411f2 100644 --- a/pandas/tests/reshape/merge/test_merge.py +++ b/pandas/tests/reshape/merge/test_merge.py @@ -2030,7 +2030,7 @@ def test_merge_suffix(col1, col2, kwargs, expected_cols): ( "right", DataFrame( - {"A": [100, 200, 300], "B1": [60, 70, np.nan], "B2": [600, 700, 800], } + {"A": [100, 200, 300], "B1": [60, 70, np.nan], "B2": [600, 700, 800],} ), ), ( From 051337818c90589de72a9d13c64afa02060c0a7d Mon Sep 17 00:00:00 2001 From: jbrockmendel Date: Thu, 23 Apr 2020 11:29:19 -0700 Subject: [PATCH 4/4] lint fixup --- pandas/tests/reshape/merge/test_merge.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/tests/reshape/merge/test_merge.py b/pandas/tests/reshape/merge/test_merge.py index bb7f8352411f2..a92e628960456 100644 --- a/pandas/tests/reshape/merge/test_merge.py +++ b/pandas/tests/reshape/merge/test_merge.py @@ -2030,7 +2030,7 @@ def test_merge_suffix(col1, col2, kwargs, expected_cols): ( "right", DataFrame( - {"A": [100, 200, 300], "B1": [60, 70, np.nan], "B2": [600, 700, 800],} + {"A": [100, 200, 300], "B1": [60, 70, np.nan], "B2": [600, 700, 800]} ), ), (