code: def _execute_reduce(cls, ctx, op: "DataFramePSRSShuffle"):
      out_chunk = op.outputs[0]
      raw_inputs = list(op.iter_mapper_data(ctx, pop=False))
  
      xdf = (
          pd
          if isinstance(raw_inputs[0], (pd.DataFrame, pd.Series))
          else cudf
      )
      if xdf is pd:
          concat_values = xdf.concat(
              raw_inputs, axis=op.axis, copy=False
          )
      else:
          concat_values = xdf.concat(raw_inputs, axis=op.axis)
      del raw_inputs[:]
  
      if isinstance(concat_values, xdf.DataFrame):
          concat_values.drop(
              _PSRS_DISTINCT_COL, axis=1, inplace=True, errors="ignore"
          )
  
          col_index_dtype = out_chunk.columns_value.to_pandas().dtype
          if concat_values.columns.dtype != col_index_dtype:
              concat_values.columns = concat_values.columns.astype(
                  col_index_dtype
              )
  
      if op.sort_type == "sort_values":
          ctx[op.outputs[0].key] = execute_sort_values(
              concat_values, op
          )
      else:
          ctx[op.outputs[0].key] = execute_sort_index(concat_values, op)
  
imports: import os
  import numpy
  import pandas
  from ...None import opcodes
  from ...core.operand import OperandStage, MapReduceOperand
  from ...utils import lazy_import, calc_nsplits
  from ...serialization.serializables import AnyField, Int32Field, ListField, StringField, BoolField
  from ...tensor.base.psrs import PSRSOperandMixin
  from ..core import IndexValue, OutputType
  from ..utils import standardize_range_index, parse_index, is_cudf
  from ..operands import DataFrameOperandMixin, DataFrameOperand, DataFrameShuffleProxy
label_desc: Use image node_id 9 for calling the DataFramePSRSShuffle obj's underlying member method code with example usage: obj._execute_reduce(cls, ctx, op) without return types