docs: def agg(self, aggregations):
          """Multiple aggregations optimized.
  
          Parameters
          ----------
          aggregations : list of str
              Which aggregations to perform.
  
          Returns
          -------
          DataFrame
              DataFrame with the aggregations per column.
  
          """
          check_type(aggregations, list)
  
          df = _drop_str_columns(self)
          if len(df._data) == 0:
              # conforming to what pandas does
              raise ValueError('No results')
  
          new_index = Index(np.array(aggregations, dtype=np.bytes_), np.dtype(np.bytes_))
          new_data = OrderedDict((column.name, _series_agg(column, aggregations, new_index))
                                 for column in df._iter())
  
          return DataFrame(new_data, new_index)