From e631e1a1b72176ea85758475df3e36ab820cecbe Mon Sep 17 00:00:00 2001 From: Patrick Hoefler Date: Wed, 28 Dec 2022 20:50:36 +0100 Subject: [PATCH] ENH: Add lazy copy for series.reorder_levels --- pandas/core/series.py | 2 +- pandas/tests/copy_view/test_methods.py | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/pandas/core/series.py b/pandas/core/series.py index b69fb4c1b58aa..ab58631cbcbe1 100644 --- a/pandas/core/series.py +++ b/pandas/core/series.py @@ -4114,7 +4114,7 @@ def reorder_levels(self, order: Sequence[Level]) -> Series: if not isinstance(self.index, MultiIndex): # pragma: no cover raise Exception("Can only reorder levels on a hierarchical axis.") - result = self.copy() + result = self.copy(deep=None) assert isinstance(result.index, MultiIndex) result.index = result.index.reorder_levels(order) return result diff --git a/pandas/tests/copy_view/test_methods.py b/pandas/tests/copy_view/test_methods.py index 878f1d8089d33..f6e2de5d0f4e0 100644 --- a/pandas/tests/copy_view/test_methods.py +++ b/pandas/tests/copy_view/test_methods.py @@ -424,6 +424,25 @@ def test_reorder_levels(using_copy_on_write): tm.assert_frame_equal(df, df_orig) +def test_series_reorder_levels(using_copy_on_write): + index = MultiIndex.from_tuples( + [(1, 1), (1, 2), (2, 1), (2, 2)], names=["one", "two"] + ) + ser = Series([1, 2, 3, 4], index=index) + ser_orig = ser.copy() + ser2 = ser.reorder_levels(order=["two", "one"]) + + if using_copy_on_write: + assert np.shares_memory(ser2.values, ser.values) + else: + assert not np.shares_memory(ser2.values, ser.values) + + ser2.iloc[0] = 0 + if using_copy_on_write: + assert not np.shares_memory(ser2.values, ser.values) + tm.assert_series_equal(ser, ser_orig) + + def test_frame_set_axis(using_copy_on_write): # GH 49473 df = DataFrame({"a": [1, 2, 3], "b": [4, 5, 6], "c": [0.1, 0.2, 0.3]})