From 5814467de075095119ca8d6d3d86f1ac473ee4d6 Mon Sep 17 00:00:00 2001 From: Natalia Mokeeva Date: Mon, 29 Jan 2024 23:29:42 +0100 Subject: [PATCH 1/4] removed deprecated argument obj argument from GroupBy get_group --- doc/source/whatsnew/v3.0.0.rst | 7 +++++++ pandas/core/groupby/groupby.py | 18 +++++------------- pandas/tests/groupby/test_groupby.py | 8 +++----- 3 files changed, 15 insertions(+), 18 deletions(-) diff --git a/doc/source/whatsnew/v3.0.0.rst b/doc/source/whatsnew/v3.0.0.rst index 6d41c29a6c614..c897230274394 100644 --- a/doc/source/whatsnew/v3.0.0.rst +++ b/doc/source/whatsnew/v3.0.0.rst @@ -96,6 +96,13 @@ Deprecations - Deprecated :meth:`Timestamp.utcnow`, use ``Timestamp.now("UTC")`` instead (:issue:`56680`) - +.. --------------------------------------------------------------------------- +.. _whatsnew_300.prior_deprecations: + +Removal of prior version deprecations/changes +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +- Removed deprecated argument ``obj`` in :meth:`GroupBy.get_group` (:issue:`53545`) + .. --------------------------------------------------------------------------- .. _whatsnew_300.performance: diff --git a/pandas/core/groupby/groupby.py b/pandas/core/groupby/groupby.py index b2afaffc267fa..677d665fa3d37 100644 --- a/pandas/core/groupby/groupby.py +++ b/pandas/core/groupby/groupby.py @@ -1062,15 +1062,14 @@ def get_group(self, name, obj=None) -> DataFrame | Series: it is None, the object groupby was called on will be used. - .. deprecated:: 2.1.0 - The obj is deprecated and will be removed in a future version. - Do ``df.iloc[gb.indices.get(name)]`` - instead of ``gb.get_group(name, obj=df)``. - Returns ------- same type as obj + Raises + ------ + ValueError : The passed argument obj is not None. + Examples -------- @@ -1146,14 +1145,7 @@ def get_group(self, name, obj=None) -> DataFrame | Series: indexer = inds if self.axis == 0 else (slice(None), inds) return self._selected_obj.iloc[indexer] else: - warnings.warn( - "obj is deprecated and will be removed in a future version. " - "Do ``df.iloc[gb.indices.get(name)]`` " - "instead of ``gb.get_group(name, obj=df)``.", - FutureWarning, - stacklevel=find_stack_level(), - ) - return obj._take_with_is_copy(inds, axis=self.axis) + raise ValueError("cannot pass argument obj to get_group") @final def __iter__(self) -> Iterator[tuple[Hashable, NDFrameT]]: diff --git a/pandas/tests/groupby/test_groupby.py b/pandas/tests/groupby/test_groupby.py index 14866ce2065ed..737b243b75f73 100644 --- a/pandas/tests/groupby/test_groupby.py +++ b/pandas/tests/groupby/test_groupby.py @@ -527,13 +527,11 @@ def test_as_index_select_column(): def test_obj_arg_get_group_deprecated(): - depr_msg = "obj is deprecated" + msg = "cannot pass parameter obj to get_group" df = DataFrame({"a": [1, 1, 2], "b": [3, 4, 5]}) - expected = df.iloc[df.groupby("b").indices.get(4)] - with tm.assert_produces_warning(FutureWarning, match=depr_msg): - result = df.groupby("b").get_group(4, obj=df) - tm.assert_frame_equal(result, expected) + with pytest.raises(ValueError, match=msg): + df.groupby("b").get_group(4, obj=df) def test_groupby_as_index_select_column_sum_empty_df(): From 9c3c084ba00398b26359bf2d899386661dc5e5c2 Mon Sep 17 00:00:00 2001 From: Natalia Mokeeva Date: Tue, 30 Jan 2024 00:19:42 +0100 Subject: [PATCH 2/4] correct msg in test_obj_arg_get_group_deprecated --- pandas/tests/groupby/test_groupby.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/tests/groupby/test_groupby.py b/pandas/tests/groupby/test_groupby.py index 737b243b75f73..995e72cff66bd 100644 --- a/pandas/tests/groupby/test_groupby.py +++ b/pandas/tests/groupby/test_groupby.py @@ -527,7 +527,7 @@ def test_as_index_select_column(): def test_obj_arg_get_group_deprecated(): - msg = "cannot pass parameter obj to get_group" + msg = "cannot pass argument obj to get_group" df = DataFrame({"a": [1, 1, 2], "b": [3, 4, 5]}) with pytest.raises(ValueError, match=msg): From d31326205cf6bad55c8be74f33ceeb0ab3fda055 Mon Sep 17 00:00:00 2001 From: Natalia Mokeeva Date: Tue, 30 Jan 2024 23:49:03 +0100 Subject: [PATCH 3/4] remove the parameter obj --- pandas/core/groupby/groupby.py | 19 ++++--------------- pandas/tests/groupby/test_groupby.py | 8 -------- 2 files changed, 4 insertions(+), 23 deletions(-) diff --git a/pandas/core/groupby/groupby.py b/pandas/core/groupby/groupby.py index 677d665fa3d37..33cc3de6ac46a 100644 --- a/pandas/core/groupby/groupby.py +++ b/pandas/core/groupby/groupby.py @@ -1049,7 +1049,7 @@ def pipe( return com.pipe(self, func, *args, **kwargs) @final - def get_group(self, name, obj=None) -> DataFrame | Series: + def get_group(self, name) -> DataFrame | Series: """ Construct DataFrame from group with provided name. @@ -1057,18 +1057,10 @@ def get_group(self, name, obj=None) -> DataFrame | Series: ---------- name : object The name of the group to get as a DataFrame. - obj : DataFrame, default None - The DataFrame to take the DataFrame out of. If - it is None, the object groupby was called on will - be used. Returns ------- - same type as obj - - Raises - ------ - ValueError : The passed argument obj is not None. + DataFrame or Series Examples -------- @@ -1141,11 +1133,8 @@ def get_group(self, name, obj=None) -> DataFrame | Series: if not len(inds): raise KeyError(name) - if obj is None: - indexer = inds if self.axis == 0 else (slice(None), inds) - return self._selected_obj.iloc[indexer] - else: - raise ValueError("cannot pass argument obj to get_group") + indexer = inds if self.axis == 0 else (slice(None), inds) + return self._selected_obj.iloc[indexer] @final def __iter__(self) -> Iterator[tuple[Hashable, NDFrameT]]: diff --git a/pandas/tests/groupby/test_groupby.py b/pandas/tests/groupby/test_groupby.py index 995e72cff66bd..7f7d9544c3891 100644 --- a/pandas/tests/groupby/test_groupby.py +++ b/pandas/tests/groupby/test_groupby.py @@ -526,14 +526,6 @@ def test_as_index_select_column(): tm.assert_series_equal(result, expected) -def test_obj_arg_get_group_deprecated(): - msg = "cannot pass argument obj to get_group" - - df = DataFrame({"a": [1, 1, 2], "b": [3, 4, 5]}) - with pytest.raises(ValueError, match=msg): - df.groupby("b").get_group(4, obj=df) - - def test_groupby_as_index_select_column_sum_empty_df(): # GH 35246 df = DataFrame(columns=Index(["A", "B", "C"], name="alpha")) From edb564eb5659634b0899bedbd106636fa21ef13b Mon Sep 17 00:00:00 2001 From: Natalia Mokeeva Date: Wed, 31 Jan 2024 00:06:08 +0100 Subject: [PATCH 4/4] correct the note in v3.0.0.rst --- doc/source/whatsnew/v3.0.0.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/whatsnew/v3.0.0.rst b/doc/source/whatsnew/v3.0.0.rst index c897230274394..ebcfd16f92d29 100644 --- a/doc/source/whatsnew/v3.0.0.rst +++ b/doc/source/whatsnew/v3.0.0.rst @@ -101,7 +101,7 @@ Deprecations Removal of prior version deprecations/changes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- Removed deprecated argument ``obj`` in :meth:`GroupBy.get_group` (:issue:`53545`) +- Removed deprecated argument ``obj`` in :meth:`.DataFrameGroupBy.get_group` and :meth:`.SeriesGroupBy.get_group` (:issue:`53545`) .. --------------------------------------------------------------------------- .. _whatsnew_300.performance: