Skip to content

Commit f816fb9

Browse files
authored
ENH: test CoW for drop_level (#50552)
1 parent dab080e commit f816fb9

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

pandas/core/generic.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -853,7 +853,7 @@ def droplevel(self: NDFrameT, level: IndexLabel, axis: Axis = 0) -> NDFrameT:
853853
"""
854854
labels = self._get_axis(axis)
855855
new_labels = labels.droplevel(level)
856-
return self.set_axis(new_labels, axis=axis)
856+
return self.set_axis(new_labels, axis=axis, copy=None)
857857

858858
def pop(self, item: Hashable) -> Series | Any:
859859
result = self[item]

pandas/tests/copy_view/test_methods.py

+19
Original file line numberDiff line numberDiff line change
@@ -615,3 +615,22 @@ def test_tz_convert_localize(using_copy_on_write, func, tz):
615615
ser2.iloc[0] = 0
616616
assert not np.shares_memory(ser2.values, ser.values)
617617
tm.assert_series_equal(ser, ser_orig)
618+
619+
620+
def test_droplevel(using_copy_on_write):
621+
# GH 49473
622+
index = MultiIndex.from_tuples([(1, 1), (1, 2), (2, 1)], names=["one", "two"])
623+
df = DataFrame({"a": [1, 2, 3], "b": [4, 5, 6], "c": [7, 8, 9]}, index=index)
624+
df_orig = df.copy()
625+
df2 = df.droplevel(0)
626+
627+
if using_copy_on_write:
628+
assert np.shares_memory(get_array(df2, "c"), get_array(df, "c"))
629+
else:
630+
assert not np.shares_memory(get_array(df2, "c"), get_array(df, "c"))
631+
632+
# mutating df2 triggers a copy-on-write for that column / block
633+
df2.iloc[0, 0] = 0
634+
635+
assert not np.shares_memory(get_array(df2, "c"), get_array(df, "c"))
636+
tm.assert_frame_equal(df, df_orig)

0 commit comments

Comments
 (0)