class_docstr: Data model used for storing a batch of frames.
  Internally stored as a pandas DataFrame with columns
  "id" and "data".
  id: integer index of frame
  data: frame as np.array
  
  Arguments:
      frames (DataFrame): pandas Dataframe holding frames data
class_docstr_tok: ["Data","model","used","for","storing","a","batch","of","frames",".","Internally","stored","as","a","pandas","DataFrame","with","columns","''","id","''","and","``","data","''",".","id",":","integer","index","of","frame","data",":","frame","as","np.array","Arguments",":","frames","(","DataFrame",")",":","pandas","Dataframe","holding","frames","data"]
docstr: Adds two batch frames and return a new batch frame
  Arguments:
      other (Batch): other framebatch to add
  
  Returns:
      Batch
docstr_tok: ["Adds","two","batch","frames","and","return","a","new","batch","frame","Arguments",":","other","(","Batch",")",":","other","framebatch","to","add","Returns",":","Batch"]
code: def __add__(self, other: Batch) -> Batch:
      """
      Adds two batch frames and return a new batch frame
      Arguments:
          other (Batch): other framebatch to add
  
      Returns:
          Batch
      """
      if not isinstance(other, Batch):
          raise TypeError("Input should be of type Batch")
  
      # Appending a empty dataframe with column name leads to NaN row.
      if self.empty():
          return other
      if other.empty():
          return self
  
      return Batch.concat([self, other], copy=False)
  
imports: from typing import Callable, Iterable, List, TypeVar, Union
  import numpy
  import pandas
  from evadb.expression.abstract_expression import ExpressionType
  from evadb.parser.alias import Alias
  from evadb.utils.generic_utils import PickleSerializer
  from evadb.utils.logging_manager import logger
label_desc: Use image node_id 34 for calling the Batch obj's underlying member method code with example usage: obj.__add__(other) and returns: Batch, other, self