class_docstr: Apply an arbitrary function to a column.
  
  :param column_name:
      The name of a column to be summarized.
  :param data_type:
      The return type of this aggregation.
  :param func:
      A function which will be passed the column for processing.
  :param cast:
      If :code:`True`, each return value will be cast to the specified
      :code:`data_type` to ensure it is valid. Only disable this if you are
      certain your summary always returns the correct type.
class_docstr_tok: ["Apply","an","arbitrary","function","to","a","column",".",":","param","column_name",":","The","name","of","a","column","to","be","summarized",".",":","param","data_type",":","The","return","type","of","this","aggregation",".",":","param","func",":","A","function","which","will","be","passed","the","column","for","processing",".",":","param","cast",":","If",":","code",":","`","True","`",",","each","return","value","will","be","cast","to","the","specified",":","code",":","`","data_type","`","to","ensure","it","is","valid",".","Only","disable","this","if","you","are","certain","your","summary","always","returns","the","correct","type","."]
code: def run(self, table):
      v = self._func(table.columns[self._column_name])
  
      if self._cast:
          v = self._data_type.cast(v)
  
      return v
  
imports: from agate.aggregations.base import Aggregation
label_desc: Use image node_id 3 for calling the Summary obj's underlying member method code with example usage: obj.run(table) and returns: v