From bfef1d3ef2b2b4febcd6647c5b2b77f74f787d2c Mon Sep 17 00:00:00 2001 From: Brock Date: Thu, 22 Apr 2021 09:57:37 -0700 Subject: [PATCH] CLN: avoid catching AttributeErorr in DataFrameGroupBy.aggreate --- pandas/core/groupby/generic.py | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/pandas/core/groupby/generic.py b/pandas/core/groupby/generic.py index 4a721ae0d4bf6..8c35d91c52a2f 100644 --- a/pandas/core/groupby/generic.py +++ b/pandas/core/groupby/generic.py @@ -1035,24 +1035,28 @@ def aggregate(self, func=None, *args, engine=None, engine_kwargs=None, **kwargs) else: # try to treat as if we are passing a list + gba = GroupByApply(self, [func], args=(), kwargs={}) try: - result = GroupByApply(self, [func], args=(), kwargs={}).agg() - - # 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.rename( - [self._selected_obj.columns.name] * result.columns.nlevels - ).droplevel(-1) + result = gba.agg() except ValueError as err: if "no results" not in str(err): # raised directly by _aggregate_multiple_funcs raise result = self._aggregate_frame(func) - except AttributeError: - # catch exception from line 969 - # (Series does not have attribute "columns"), see GH 35246 - 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._selected_obj.name] + else: + # 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.rename( + [sobj.columns.name] * result.columns.nlevels + ).droplevel(-1) if relabeling: