code: def execute(cls, ctx, op: "GroupByCumReductionOperand"):
      in_data = ctx[op.inputs[0].key]
      out_chunk = op.outputs[0]
  
      if not in_data or in_data.empty:
          ctx[out_chunk.key] = (
              build_empty_df(out_chunk.dtypes)
              if op.output_types[0] == OutputType.dataframe
              else build_empty_series(
                  out_chunk.dtype, name=out_chunk.name
              )
          )
          return
  
      func_name = getattr(op, "_func_name")
      if func_name == "cumcount":
          ctx[out_chunk.key] = in_data.cumcount(ascending=op.ascending)
      else:
          result = getattr(in_data, func_name)(axis=op.axis)
          if result.ndim == 2:
              ctx[out_chunk.key] = result.astype(
                  out_chunk.dtypes, copy=False
              )
          else:
              ctx[out_chunk.key] = result.astype(
                  out_chunk.dtype, copy=False
              )
  
imports: import numpy
  import pandas
  from ...None import opcodes
  from ...core import OutputType
  from ...serialization.serializables import BoolField, AnyField
  from ...utils import lazy_import
  from ..utils import parse_index, build_empty_df, build_empty_series, validate_axis
  from ..operands import DataFrameOperandMixin, DataFrameOperand
label_desc: Use image node_id 7 for calling the GroupByCumReductionOperand obj's underlying member method code with example usage: obj.execute(cls, ctx, op) without return types