From 3cf2dd4dc57860ec67d5e1cccc634b3df4ba81d2 Mon Sep 17 00:00:00 2001 From: Nima Sarang Date: Wed, 3 Aug 2022 13:57:14 -0400 Subject: [PATCH 1/5] Fix bug in warning --- pandas/core/reshape/merge.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pandas/core/reshape/merge.py b/pandas/core/reshape/merge.py index e06a288c1eb38..c0560b858ebbd 100644 --- a/pandas/core/reshape/merge.py +++ b/pandas/core/reshape/merge.py @@ -673,8 +673,8 @@ def __init__( if _left.columns.nlevels != _right.columns.nlevels: msg = ( "merging between different levels is deprecated and will be removed " - f"in a future version. ({left.columns.nlevels} levels on the left, " - f"{right.columns.nlevels} on the right)" + f"in a future version. ({_left.columns.nlevels} levels on the left, " + f"{_right.columns.nlevels} on the right)" ) # stacklevel chosen to be correct when this is reached via pd.merge # (and not DataFrame.join) From 45eae358c834aa72e2bd3d8c00dd8f1ecdf6103f Mon Sep 17 00:00:00 2001 From: Nima Sarang Date: Fri, 12 Aug 2022 18:37:58 -0400 Subject: [PATCH 2/5] add test --- pandas/tests/reshape/merge/test_merge.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/pandas/tests/reshape/merge/test_merge.py b/pandas/tests/reshape/merge/test_merge.py index 116fb298df61d..fb8d5f4d9ce5d 100644 --- a/pandas/tests/reshape/merge/test_merge.py +++ b/pandas/tests/reshape/merge/test_merge.py @@ -2195,6 +2195,24 @@ def test_merge_series(on, left_on, right_on, left_index, right_index, nm): ) +def test_merge_series_multilevel(): + a = DataFrame( + {"A": [1, 2, 3, 4]}, + index=MultiIndex.from_product([["a", "b"], [0, 1]], names=["outer", "inner"]), + ) + b = Series( + [1, 2, 3, 4], + index=MultiIndex.from_product([["a", "b"], [1, 2]], names=["outer", "inner"]), + name=("B", "C"), + ) + expected = DataFrame( + {"A": [2, 4], ("B", "C"): [1, 3]}, + index=MultiIndex.from_product([["a", "b"], [1]], names=["outer", "inner"]), + ) + result = merge(a, b, on=["outer", "inner"]) + tm.assert_frame_equal(result, expected) + + @pytest.mark.parametrize( "col1, col2, kwargs, expected_cols", [ From e2d21e371e270b2f632ac31f5233fff301f25c04 Mon Sep 17 00:00:00 2001 From: Nima Sarang Date: Sun, 14 Aug 2022 12:35:36 -0400 Subject: [PATCH 3/5] add note to whatsnew --- doc/source/whatsnew/v1.4.4.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/whatsnew/v1.4.4.rst b/doc/source/whatsnew/v1.4.4.rst index 89487bfde94a5..0f56b8826e959 100644 --- a/doc/source/whatsnew/v1.4.4.rst +++ b/doc/source/whatsnew/v1.4.4.rst @@ -16,7 +16,7 @@ Fixed regressions ~~~~~~~~~~~~~~~~~ - Fixed regression in :func:`concat` materializing :class:`Index` during sorting even if :class:`Index` was already sorted (:issue:`47501`) - Fixed regression in setting ``None`` or non-string value into a ``string``-dtype Series using a mask (:issue:`47628`) -- +- Fixed regression in :func:`merge` throwing an error when passing a :class:`Series` with a multi-level name .. --------------------------------------------------------------------------- From 336ec74cabca73b085c35273423a54f7dfc2fb41 Mon Sep 17 00:00:00 2001 From: Patrick Hoefler <61934744+phofl@users.noreply.github.com> Date: Thu, 18 Aug 2022 23:27:22 +0200 Subject: [PATCH 4/5] Add gh ref --- pandas/tests/reshape/merge/test_merge.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pandas/tests/reshape/merge/test_merge.py b/pandas/tests/reshape/merge/test_merge.py index fb8d5f4d9ce5d..537c4b2a13da2 100644 --- a/pandas/tests/reshape/merge/test_merge.py +++ b/pandas/tests/reshape/merge/test_merge.py @@ -2196,6 +2196,7 @@ def test_merge_series(on, left_on, right_on, left_index, right_index, nm): def test_merge_series_multilevel(): + # GH#47946 a = DataFrame( {"A": [1, 2, 3, 4]}, index=MultiIndex.from_product([["a", "b"], [0, 1]], names=["outer", "inner"]), From 436a0adf2bb6c7740fdc797c689b0a466c4f51d4 Mon Sep 17 00:00:00 2001 From: Joris Van den Bossche Date: Fri, 19 Aug 2022 10:30:28 +0200 Subject: [PATCH 5/5] catch warning in the test --- pandas/tests/reshape/merge/test_merge.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pandas/tests/reshape/merge/test_merge.py b/pandas/tests/reshape/merge/test_merge.py index 39abe0b7b2b4b..c7d7d1b0daa50 100644 --- a/pandas/tests/reshape/merge/test_merge.py +++ b/pandas/tests/reshape/merge/test_merge.py @@ -2210,7 +2210,8 @@ def test_merge_series_multilevel(): {"A": [2, 4], ("B", "C"): [1, 3]}, index=MultiIndex.from_product([["a", "b"], [1]], names=["outer", "inner"]), ) - result = merge(a, b, on=["outer", "inner"]) + with tm.assert_produces_warning(FutureWarning): + result = merge(a, b, on=["outer", "inner"]) tm.assert_frame_equal(result, expected)