code: def _execute_map(cls, ctx, op: "BaseDataFrameExpandingAgg"):
      in_data = ctx[op.inputs[0].key]
  
      # map according to map groups
      map_results = []
      summary_results = []
      for map_func_str, cols in op.map_groups.items():
          if cols is None:
              src_df = in_data
          else:
              src_df = in_data[cols]
  
          result, summary = cls._execute_map_function(
              op, map_func_str, src_df
          )
          map_results.append(result)
          if op.output_agg:
              summary_results.append(summary)
  
      if op.output_agg:
          summary_results.append(
              pd.Series([len(in_data)], index=summary_results[0].index)
          )
  
      ctx[op.outputs[0].key] = tuple(map_results)
      if op.output_agg:
          ctx[op.outputs[1].key] = tuple(summary_results)
  
imports: from collections import namedtuple, OrderedDict
  from collections.abc import Iterable
  from typing import Dict
  import numpy
  import pandas
  from ...core.operand import OperandStage
  from ...serialization.serializables import AnyField, BoolField, Int32Field, Int64Field, DictField, StringField
  from ...utils import tokenize
  from ..core import DATAFRAME_TYPE
  from ..merge import DataFrameConcat
  from ..operands import DataFrameOperand, DataFrameOperandMixin
  from ..utils import build_df, parse_index, build_empty_series, filter_dtypes_by_index
label_desc: Use image node_id 25 for calling the BaseDataFrameExpandingAgg obj's underlying member method code with example usage: obj._execute_map(cls, ctx, op) without return types