diff --git a/pandas/core/frame.py b/pandas/core/frame.py index 1630c2c31920d..179279cc08bab 100644 --- a/pandas/core/frame.py +++ b/pandas/core/frame.py @@ -4895,7 +4895,6 @@ def eval(self, expr: str, *, inplace: bool = False, **kwargs) -> Any | None: inplace = validate_bool_kwarg(inplace, "inplace") kwargs["level"] = kwargs.pop("level", 0) + 1 - # TODO(CoW) those index/column resolvers create unnecessary refs to `self` index_resolvers = self._get_index_resolvers() column_resolvers = self._get_cleaned_column_resolvers() resolvers = column_resolvers, index_resolvers diff --git a/pandas/core/series.py b/pandas/core/series.py index 464e066b4e86a..de4b3e750a7e8 100644 --- a/pandas/core/series.py +++ b/pandas/core/series.py @@ -4740,7 +4740,11 @@ def transform( ) -> DataFrame | Series: # Validate axis argument self._get_axis_number(axis) - ser = self.copy(deep=False) if using_copy_on_write() else self + ser = ( + self.copy(deep=False) + if using_copy_on_write() or warn_copy_on_write() + else self + ) result = SeriesApply(ser, func=func, args=args, kwargs=kwargs).transform() return result diff --git a/pandas/tests/copy_view/test_methods.py b/pandas/tests/copy_view/test_methods.py index 1e3c95dbc1ca3..558b483933f25 100644 --- a/pandas/tests/copy_view/test_methods.py +++ b/pandas/tests/copy_view/test_methods.py @@ -1938,8 +1938,8 @@ def func(ser): ser.iloc[0] = 100 return ser - # TODO(CoW-warn) should warn? - ser.transform(func) + with tm.assert_cow_warning(warn_copy_on_write): + ser.transform(func) if using_copy_on_write: tm.assert_series_equal(ser, ser_orig)