code: def execute(cls, ctx, op: "GroupByHead"):
      in_data = ctx[op.inputs[0].key]
  
      params = op.groupby_params.copy()
      selection = params.pop("selection", None)
  
      if hasattr(in_data, "groupby"):
          grouped = in_data.groupby(**params)
      else:
          grouped = in_data
  
      if selection:
          grouped = grouped[selection]
  
      result = grouped.head(op.row_count)
      if not op.enable_negative and op.row_count < 0:
          result = result.iloc[:0]
      ctx[op.outputs[0].key] = result
  
file_path: mars/mars/dataframe/groupby/head.py
imports: import numpy
  import pandas
  from ...None import opcodes
  from ...core import OutputType, get_output_types, recursive_tile
  from ...serialization.serializables import DictField, Int64Field, BoolField
  from ...utils import pd_release_version
  from ..core import IndexValue
  from ..operands import DataFrameOperandMixin, DataFrameOperand
  from ..utils import build_concatenated_rows_frame, parse_index
label_desc: Use image node_id 3 for calling the GroupByHead obj's underlying member method code with example usage: obj.execute(cls, ctx, op) without return types