code: def new_dataframe(
      self,
      inputs,
      shape=None,
      dtypes=None,
      index_value=None,
      columns_value=None,
      **kw,
  ):
      if getattr(self, "output_limit") != 1:
          raise TypeError(
              "cannot new DataFrame with more than 1 outputs"
          )
  
      return self.new_dataframes(
          inputs,
          shape=shape,
          dtypes=dtypes,
          index_value=index_value,
          columns_value=columns_value,
          **kw,
      )[0]
  
imports: from collections import OrderedDict
  from functools import reduce
  import numpy
  import pandas
  from ..core import FuseChunkData, FuseChunk, ENTITY_TYPE, OutputType
  from ..core.operand import Operand, TileableOperandMixin, Fuse, ShuffleProxy, FuseChunkMixin
  from ..tensor.core import TENSOR_TYPE
  from ..tensor.datasource import tensor
  from ..tensor.operands import TensorOperandMixin
  from ..utils import calc_nsplits
  from .core import DATAFRAME_CHUNK_TYPE, SERIES_CHUNK_TYPE, INDEX_CHUNK_TYPE, DATAFRAME_TYPE, SERIES_TYPE, INDEX_TYPE, DATAFRAME_GROUPBY_TYPE, SERIES_GROUPBY_TYPE, CATEGORICAL_TYPE
  from .utils import parse_index
label_desc: Use image node_id 2 for calling the DataFrameOperandMixin obj's underlying member method code with example usage: obj.new_dataframe(inputs, shape, dtypes, index_value, columns_value) and returns: self