diff --git a/pandas/core/generic.py b/pandas/core/generic.py index 2468c43337d0d..bcfd624bd8354 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -7830,7 +7830,6 @@ def groupby( group_keys=True, squeeze=False, observed=False, - **kwargs ): """ Group DataFrame or Series using a mapper or by a Series of columns. @@ -7876,10 +7875,6 @@ def groupby( .. versionadded:: 0.23.0 - **kwargs - Optional, only accepts keyword argument 'mutated' and is passed - to groupby. - Returns ------- DataFrameGroupBy or SeriesGroupBy @@ -7941,12 +7936,13 @@ def groupby( Captive 210.0 Wild 185.0 """ - from pandas.core.groupby.groupby import groupby + from pandas.core.groupby.groupby import get_groupby if level is None and by is None: raise TypeError("You have to supply one of 'by' and 'level'") axis = self._get_axis_number(axis) - return groupby( + + return get_groupby( self, by=by, axis=axis, @@ -7956,7 +7952,6 @@ def groupby( group_keys=group_keys, squeeze=squeeze, observed=observed, - **kwargs ) def asfreq(self, freq, method=None, how=None, normalize=False, fill_value=None): diff --git a/pandas/core/groupby/generic.py b/pandas/core/groupby/generic.py index 56a8a7d15077b..f0b42ec1156f6 100644 --- a/pandas/core/groupby/generic.py +++ b/pandas/core/groupby/generic.py @@ -62,7 +62,7 @@ GroupBy, _apply_docs, _transform_template, - groupby, + get_groupby, ) from pandas.core.index import Index, MultiIndex, _all_indexes_same import pandas.core.indexes.base as ibase @@ -997,7 +997,7 @@ def _cython_agg_blocks( # reductions; see GH#28949 obj = obj.iloc[:, 0] - s = groupby(obj, self.grouper) + s = get_groupby(obj, self.grouper) try: result = s.aggregate(lambda x: alt(x, axis=self.axis)) except TypeError: diff --git a/pandas/core/groupby/groupby.py b/pandas/core/groupby/groupby.py index fd45d60b02277..dc4d363bffffa 100644 --- a/pandas/core/groupby/groupby.py +++ b/pandas/core/groupby/groupby.py @@ -26,7 +26,6 @@ class providing the base-class of operations. from pandas.compat.numpy import function as nv from pandas.errors import AbstractMethodError from pandas.util._decorators import Appender, Substitution, cache_readonly -from pandas.util._validators import validate_kwargs from pandas.core.dtypes.cast import maybe_downcast_to_dtype from pandas.core.dtypes.common import ( @@ -349,12 +348,12 @@ def __init__( grouper=None, exclusions=None, selection=None, - as_index=True, - sort=True, - group_keys=True, - squeeze=False, - observed=False, - **kwargs + as_index: bool = True, + sort: bool = True, + group_keys: bool = True, + squeeze: bool = False, + observed: bool = False, + mutated: bool = False, ): self._selection = selection @@ -376,7 +375,7 @@ def __init__( self.group_keys = group_keys self.squeeze = squeeze self.observed = observed - self.mutated = kwargs.pop("mutated", False) + self.mutated = mutated if grouper is None: from pandas.core.groupby.grouper import get_grouper @@ -396,9 +395,6 @@ def __init__( self.grouper = grouper self.exclusions = set(exclusions) if exclusions else set() - # we accept no other args - validate_kwargs("group", kwargs, {}) - def __len__(self) -> int: return len(self.groups) @@ -2490,7 +2486,22 @@ def _reindex_output(self, output): @Appender(GroupBy.__doc__) -def groupby(obj: NDFrame, by, **kwds): +def get_groupby( + obj: NDFrame, + by=None, + axis: int = 0, + level=None, + grouper=None, + exclusions=None, + selection=None, + as_index: bool = True, + sort: bool = True, + group_keys: bool = True, + squeeze: bool = False, + observed: bool = False, + mutated: bool = False, +): + if isinstance(obj, Series): from pandas.core.groupby.generic import SeriesGroupBy @@ -2504,4 +2515,18 @@ def groupby(obj: NDFrame, by, **kwds): else: raise TypeError("invalid type: {obj}".format(obj=obj)) - return klass(obj, by, **kwds) + return klass( + obj=obj, + keys=by, + axis=axis, + level=level, + grouper=grouper, + exclusions=exclusions, + selection=selection, + as_index=as_index, + sort=sort, + group_keys=group_keys, + squeeze=squeeze, + observed=observed, + mutated=mutated, + ) diff --git a/pandas/core/resample.py b/pandas/core/resample.py index 6d877bf666881..d980d5ba0be6e 100644 --- a/pandas/core/resample.py +++ b/pandas/core/resample.py @@ -21,7 +21,7 @@ from pandas.core.generic import _shared_docs from pandas.core.groupby.base import GroupByMixin from pandas.core.groupby.generic import SeriesGroupBy -from pandas.core.groupby.groupby import GroupBy, _GroupBy, _pipe_template, groupby +from pandas.core.groupby.groupby import GroupBy, _GroupBy, _pipe_template, get_groupby from pandas.core.groupby.grouper import Grouper from pandas.core.groupby.ops import BinGrouper from pandas.core.indexes.datetimes import DatetimeIndex, date_range @@ -334,7 +334,7 @@ def _gotitem(self, key, ndim, subset=None): grouper = self.grouper if subset is None: subset = self.obj - grouped = groupby(subset, by=None, grouper=grouper, axis=self.axis) + grouped = get_groupby(subset, by=None, grouper=grouper, axis=self.axis) # try the key selection try: @@ -353,7 +353,7 @@ def _groupby_and_aggregate(self, how, grouper=None, *args, **kwargs): obj = self._selected_obj - grouped = groupby(obj, by=None, grouper=grouper, axis=self.axis) + grouped = get_groupby(obj, by=None, grouper=grouper, axis=self.axis) try: if isinstance(obj, ABCDataFrame) and callable(how): diff --git a/pandas/tests/window/test_grouper.py b/pandas/tests/window/test_grouper.py index b726bd3e3c8a7..c278897e1d395 100644 --- a/pandas/tests/window/test_grouper.py +++ b/pandas/tests/window/test_grouper.py @@ -3,6 +3,7 @@ import pandas as pd from pandas import DataFrame, Series +from pandas.core.groupby.groupby import get_groupby import pandas.util.testing as tm @@ -13,18 +14,18 @@ def setup_method(self, method): def test_mutated(self): - msg = r"group\(\) got an unexpected keyword argument 'foo'" + msg = r"groupby\(\) got an unexpected keyword argument 'foo'" with pytest.raises(TypeError, match=msg): self.frame.groupby("A", foo=1) g = self.frame.groupby("A") assert not g.mutated - g = self.frame.groupby("A", mutated=True) + g = get_groupby(self.frame, by="A", mutated=True) assert g.mutated def test_getitem(self): g = self.frame.groupby("A") - g_mutated = self.frame.groupby("A", mutated=True) + g_mutated = get_groupby(self.frame, by="A", mutated=True) expected = g_mutated.B.apply(lambda x: x.rolling(2).mean()) @@ -45,7 +46,7 @@ def test_getitem_multiple(self): # GH 13174 g = self.frame.groupby("A") r = g.rolling(2) - g_mutated = self.frame.groupby("A", mutated=True) + g_mutated = get_groupby(self.frame, by="A", mutated=True) expected = g_mutated.B.apply(lambda x: x.rolling(2).count()) result = r.B.count()