@@ -461,23 +461,19 @@ def expanding(self, min_periods: int = 1) -> windows.Window:
461461
462462 def agg (self , func = None , ** kwargs ) -> typing .Union [df .DataFrame , series .Series ]:
463463 if func :
464- if isinstance (func , str ):
465- return self .size () if func == "size" else self ._agg_string (func )
466- elif utils .is_dict_like (func ):
464+ if utils .is_dict_like (func ):
467465 return self ._agg_dict (func )
468466 elif utils .is_list_like (func ):
469467 return self ._agg_list (func )
470468 else :
471- raise NotImplementedError (
472- f"Aggregate with { func } not supported. { constants .FEEDBACK_LINK } "
473- )
469+ return self .size () if func == "size" else self ._agg_func (func )
474470 else :
475471 return self ._agg_named (** kwargs )
476472
477- def _agg_string (self , func : str ) -> df .DataFrame :
473+ def _agg_func (self , func ) -> df .DataFrame :
478474 ids , labels = self ._aggregated_columns ()
479475 aggregations = [
480- aggs .agg (col_id , agg_ops .lookup_agg_func (func )) for col_id in ids
476+ aggs .agg (col_id , agg_ops .lookup_agg_func (func )[ 0 ] ) for col_id in ids
481477 ]
482478 agg_block , _ = self ._block .aggregate (
483479 by_column_ids = self ._by_col_ids ,
@@ -500,7 +496,7 @@ def _agg_dict(self, func: typing.Mapping) -> df.DataFrame:
500496 funcs_for_id if utils .is_list_like (funcs_for_id ) else [funcs_for_id ]
501497 )
502498 for f in func_list :
503- aggregations .append (aggs .agg (col_id , agg_ops .lookup_agg_func (f )))
499+ aggregations .append (aggs .agg (col_id , agg_ops .lookup_agg_func (f )[ 0 ] ))
504500 column_labels .append (label )
505501 agg_block , _ = self ._block .aggregate (
506502 by_column_ids = self ._by_col_ids ,
@@ -525,19 +521,23 @@ def _agg_dict(self, func: typing.Mapping) -> df.DataFrame:
525521 def _agg_list (self , func : typing .Sequence ) -> df .DataFrame :
526522 ids , labels = self ._aggregated_columns ()
527523 aggregations = [
528- aggs .agg (col_id , agg_ops .lookup_agg_func (f )) for col_id in ids for f in func
524+ aggs .agg (col_id , agg_ops .lookup_agg_func (f )[0 ])
525+ for col_id in ids
526+ for f in func
529527 ]
530528
531529 if self ._block .column_labels .nlevels > 1 :
532530 # Restructure MultiIndex for proper format: (idx1, idx2, func)
533531 # rather than ((idx1, idx2), func).
534532 column_labels = [
535- tuple (label ) + (f ,)
533+ tuple (label ) + (agg_ops . lookup_agg_func ( f )[ 1 ] ,)
536534 for label in labels .to_frame (index = False ).to_numpy ()
537535 for f in func
538536 ]
539537 else : # Single-level index
540- column_labels = [(label , f ) for label in labels for f in func ]
538+ column_labels = [
539+ (label , agg_ops .lookup_agg_func (f )[1 ]) for label in labels for f in func
540+ ]
541541
542542 agg_block , _ = self ._block .aggregate (
543543 by_column_ids = self ._by_col_ids ,
@@ -563,7 +563,7 @@ def _agg_named(self, **kwargs) -> df.DataFrame:
563563 if not isinstance (v , tuple ) or (len (v ) != 2 ):
564564 raise TypeError ("kwargs values must be 2-tuples of column, aggfunc" )
565565 col_id = self ._resolve_label (v [0 ])
566- aggregations .append (aggs .agg (col_id , agg_ops .lookup_agg_func (v [1 ])))
566+ aggregations .append (aggs .agg (col_id , agg_ops .lookup_agg_func (v [1 ])[ 0 ] ))
567567 column_labels .append (k )
568568 agg_block , _ = self ._block .aggregate (
569569 by_column_ids = self ._by_col_ids ,
0 commit comments