@@ -416,16 +416,23 @@ def agg_dict_like(self) -> DataFrame | Series:
416
416
results = {key : colg .agg (how ) for key , how in arg .items ()}
417
417
else :
418
418
# key used for column selection and output
419
- results = {
420
- key : obj ._gotitem (key , ndim = 1 ).agg (how ) for key , how in arg .items ()
421
- }
419
+ results = {}
420
+ for key , how in arg .items ():
421
+ indices = [i for i , col in enumerate (obj .columns ) if col == key ]
422
+ if len (indices ) == 1 : # for unique columns
423
+ results [key ] = obj ._gotitem (key , ndim = 1 ).agg (how )
424
+ else : # for non-unique columns
425
+ col_results = [obj .iloc [:, i ].agg (how ) for i in indices ]
426
+ results [key ] = col_results
422
427
423
428
# set the final keys
424
429
keys = list (arg .keys ())
425
430
426
431
# Avoid making two isinstance calls in all and any below
427
432
is_ndframe = [isinstance (r , ABCNDFrame ) for r in results .values ()]
428
433
434
+ is_list = [isinstance (v , list ) for v in results .values ()]
435
+
429
436
# combine results
430
437
if all (is_ndframe ):
431
438
keys_to_use : Iterable [Hashable ]
@@ -451,6 +458,14 @@ def agg_dict_like(self) -> DataFrame | Series:
451
458
"and transformation operations "
452
459
"simultaneously"
453
460
)
461
+ elif any (is_list ):
462
+ # GH#51099
463
+ # convert list-like values in results to Series with corresponding keys
464
+ from pandas import Series
465
+
466
+ values = [val for sublist in results .values () for val in sublist ]
467
+ keys = [key for key , sublist in results .items () for _ in sublist ]
468
+ result = Series (values , index = keys )
454
469
else :
455
470
from pandas import Series
456
471
0 commit comments