diff --git a/pandas/core/groupby/generic.py b/pandas/core/groupby/generic.py index fd07b472fc3da..3850f6bc12efd 100644 --- a/pandas/core/groupby/generic.py +++ b/pandas/core/groupby/generic.py @@ -269,11 +269,8 @@ def aggregate(self, func=None, *args, engine=None, engine_kwargs=None, **kwargs) result = self._aggregate_named(func, *args, **kwargs) # result is a dict whose keys are the elements of result_index - index = self.grouper.result_index - result = Series(result, index=index) - if not self.as_index: - result = self._insert_inaxis_grouper(result) - result.index = default_index(len(result)) + result = Series(result, index=self.grouper.result_index) + result = self._wrap_aggregated_output(result) return result agg = aggregate @@ -1314,19 +1311,9 @@ def aggregate(self, func=None, *args, engine=None, engine_kwargs=None, **kwargs) result = self._aggregate_frame(func) else: - sobj = self._selected_obj - - if isinstance(sobj, Series): - # GH#35246 test_groupby_as_index_select_column_sum_empty_df - result.columns = self._obj_with_exclusions.columns.copy() - else: - # Retain our column names - result.columns._set_names( - sobj.columns.names, level=list(range(sobj.columns.nlevels)) - ) - # select everything except for the last level, which is the one - # containing the name of the function(s), see GH#32040 - result.columns = result.columns.droplevel(-1) + # GH#32040, GH#35246 + # e.g. test_groupby_as_index_select_column_sum_empty_df + result.columns = self._obj_with_exclusions.columns.copy() if not self.as_index: result = self._insert_inaxis_grouper(result) @@ -1358,17 +1345,9 @@ def _aggregate_frame(self, func, *args, **kwargs) -> DataFrame: obj = self._obj_with_exclusions result: dict[Hashable, NDFrame | np.ndarray] = {} - if self.axis == 0: - # test_pass_args_kwargs_duplicate_columns gets here with non-unique columns - for name, data in self.grouper.get_iterator(obj, self.axis): - fres = func(data, *args, **kwargs) - result[name] = fres - else: - # we get here in a number of test_multilevel tests - for name in self.indices: - grp_df = self.get_group(name, obj=obj) - fres = func(grp_df, *args, **kwargs) - result[name] = fres + for name, grp_df in self.grouper.get_iterator(obj, self.axis): + fres = func(grp_df, *args, **kwargs) + result[name] = fres result_index = self.grouper.result_index other_ax = obj.axes[1 - self.axis]