diff --git a/pandas/core/groupby/generic.py b/pandas/core/groupby/generic.py index 9d6d2d698dfe5..eac2cdb9dcd0f 100644 --- a/pandas/core/groupby/generic.py +++ b/pandas/core/groupby/generic.py @@ -275,7 +275,7 @@ def aggregate(self, func=None, *args, engine=None, engine_kwargs=None, **kwargs) try: return self._python_agg_general(func, *args, **kwargs) - except (ValueError, KeyError): + except KeyError: # TODO: KeyError is raised in _python_agg_general, # see test_groupby.test_basic result = self._aggregate_named(func, *args, **kwargs) @@ -594,6 +594,7 @@ def _transform_general(self, func, *args, **kwargs): results = [] for name, group in self: + # this setattr is needed for test_transform_lambda_with_datetimetz object.__setattr__(group, "name", name) res = func(group, *args, **kwargs) diff --git a/pandas/core/groupby/ops.py b/pandas/core/groupby/ops.py index 3ee185d862b01..d0fb100fdbd9f 100644 --- a/pandas/core/groupby/ops.py +++ b/pandas/core/groupby/ops.py @@ -1089,6 +1089,9 @@ def agg_series(self, obj: Series, func: F): # preempt SeriesBinGrouper from raising TypeError return self._aggregate_series_pure_python(obj, func) + elif obj.index._has_complex_internals: + return self._aggregate_series_pure_python(obj, func) + grouper = libreduction.SeriesBinGrouper(obj, func, self.bins) return grouper.get_result()