code: def apply(self, func, *fields):
          
          results = []
          for row in self:
              if not fields:
                  results.append(func(row))
              else:
                  if any(field not in self for field in fields):
                      for field in fields:
                          if field not in self:
                              raise Exception("Column `%s` does not exist "
                                              "in DataTable" % field)
                  results.append(func(*[row[field] for field in fields]))
          return results
docs: Applies the function, `func`, to every row in the DataTable.
  
          If no fields are supplied, the entire row is passed to `func`.
          If fields are supplied, the values at all of those fields
          are passed into func in that order.
          ---
          data['diff'] = data.apply(short_diff, 'old_count', 'new_count')