@@ -269,11 +269,8 @@ def aggregate(self, func=None, *args, engine=None, engine_kwargs=None, **kwargs)
269
269
result = self ._aggregate_named (func , * args , ** kwargs )
270
270
271
271
# result is a dict whose keys are the elements of result_index
272
- index = self .grouper .result_index
273
- result = Series (result , index = index )
274
- if not self .as_index :
275
- result = self ._insert_inaxis_grouper (result )
276
- result .index = default_index (len (result ))
272
+ result = Series (result , index = self .grouper .result_index )
273
+ result = self ._wrap_aggregated_output (result )
277
274
return result
278
275
279
276
agg = aggregate
@@ -1314,19 +1311,9 @@ def aggregate(self, func=None, *args, engine=None, engine_kwargs=None, **kwargs)
1314
1311
result = self ._aggregate_frame (func )
1315
1312
1316
1313
else :
1317
- sobj = self ._selected_obj
1318
-
1319
- if isinstance (sobj , Series ):
1320
- # GH#35246 test_groupby_as_index_select_column_sum_empty_df
1321
- result .columns = self ._obj_with_exclusions .columns .copy ()
1322
- else :
1323
- # Retain our column names
1324
- result .columns ._set_names (
1325
- sobj .columns .names , level = list (range (sobj .columns .nlevels ))
1326
- )
1327
- # select everything except for the last level, which is the one
1328
- # containing the name of the function(s), see GH#32040
1329
- result .columns = result .columns .droplevel (- 1 )
1314
+ # GH#32040, GH#35246
1315
+ # e.g. test_groupby_as_index_select_column_sum_empty_df
1316
+ result .columns = self ._obj_with_exclusions .columns .copy ()
1330
1317
1331
1318
if not self .as_index :
1332
1319
result = self ._insert_inaxis_grouper (result )
@@ -1358,17 +1345,9 @@ def _aggregate_frame(self, func, *args, **kwargs) -> DataFrame:
1358
1345
obj = self ._obj_with_exclusions
1359
1346
1360
1347
result : dict [Hashable , NDFrame | np .ndarray ] = {}
1361
- if self .axis == 0 :
1362
- # test_pass_args_kwargs_duplicate_columns gets here with non-unique columns
1363
- for name , data in self .grouper .get_iterator (obj , self .axis ):
1364
- fres = func (data , * args , ** kwargs )
1365
- result [name ] = fres
1366
- else :
1367
- # we get here in a number of test_multilevel tests
1368
- for name in self .indices :
1369
- grp_df = self .get_group (name , obj = obj )
1370
- fres = func (grp_df , * args , ** kwargs )
1371
- result [name ] = fres
1348
+ for name , grp_df in self .grouper .get_iterator (obj , self .axis ):
1349
+ fres = func (grp_df , * args , ** kwargs )
1350
+ result [name ] = fres
1372
1351
1373
1352
result_index = self .grouper .result_index
1374
1353
other_ax = obj .axes [1 - self .axis ]
0 commit comments