code: def _get_execute_agg_result(
      cls, op: DataFrameGroupByAgg, in_data: pd.DataFrame
  ) -> Union[pd.DataFrame, pd.Series]:
      groupby_params = op.groupby_params.copy()
      cols = in_data.index.name or in_data.index.names
      by = op.raw_groupby_params["by"]
  
      if by is not None:
          if op.output_types[0] == OutputType.dataframe:
              groupby_params.pop("level", None)
              groupby_params["by"] = cols
              in_data = in_data.reset_index()
      else:
          # When group by multi levels, we must get the actual all levels from raw_groupby_params,
          # since level field in op.groupby_params is not correct.
          groupby_params["level"] = op.raw_groupby_params["level"]
  
      res = in_data.groupby(**groupby_params).nunique()
      return res
  
file_path: mars/mars/dataframe/groupby/nunique.py
imports: from typing import List, Union
  import pandas
  from ...core import OutputType
  from ...utils import implements
  from .aggregation import DataFrameGroupByAgg
  from .custom_aggregation import DataFrameCustomGroupByAggMixin, register_custom_groupby_agg_func
label_desc: Use image node_id 5 for calling the DataFrameCustomGroupByNuniqueMixin obj's underlying member method code with example usage: obj._get_execute_agg_result(cls, op, in_data) and returns: res