docs: def by_col(cls, df, events, populations, w=None, inplace=False,
                 pvalue='sim', outvals=None, swapname='',  **stat_kws):
          """
          Function to compute a Moran_Rate statistic on a dataframe
  
          Arguments
          ---------
          df          :   pandas.DataFrame
                          a pandas dataframe with a geometry column
          events      :   string or  list of strings
                          one or more names where events are stored
          populations :   string or list of strings
                          one or more names where the populations corresponding to the
                          events are stored. If one population column is provided, it is
                          used for all event columns. If more than one population column
                          is provided but there is not a population for every event
                          column, an exception will be raised.
          w           :   pysal weights object
                          a weights object aligned with the dataframe. If not provided, this
                          is searched for in the dataframe's metadata
          inplace     :   bool
                          a boolean denoting whether to operate on the dataframe inplace or to
                          return a series contaning the results of the computation. If
                          operating inplace, the derived columns will be named
                          'column_moran_rate'
          pvalue      :   string
                          a string denoting which pvalue should be returned. Refer to the
                          the Moran_Rate statistic's documentation for available p-values
          outvals     :   list of strings
                          list of arbitrary attributes to return as columns from the
                          Moran_Rate statistic
          **stat_kws  :   keyword arguments
                          options to pass to the underlying statistic. For this, see the
                          documentation for the Moran_Rate statistic.
  
          Returns
          --------
          If inplace, None, and operation is conducted on dataframe in memory. Otherwise,
          returns a copy of the dataframe with the relevant columns attached.
  
          See Also
          ---------
          For further documentation, refer to the Moran_Rate class in pysal.esda
          """
          if not inplace:
              new = df.copy()
              cls.by_col(new, events, populations, w=w, inplace=True,
                                pvalue=pvalue, outvals=outvals, swapname=swapname,
                                **stat_kws)
              return new
          if isinstance(events, str):
              events = [events]
          if isinstance(populations, str):
              populations = [populations]
          if len(populations) < len(events):
              populations = populations * len(events)
          if len(events) != len(populations):
              raise ValueError('There is not a one-to-one matching between events and '
                                'populations!\nEvents: {}\n\nPopulations:'
                                ' {}'.format(events, populations))
          adjusted = stat_kws.pop('adjusted', True)
  
          if isinstance(adjusted, bool):
              adjusted = [adjusted] * len(events)
          if swapname is '':
              swapname = cls.__name__.lower()
  
          rates = [assuncao_rate(df[e], df[pop]) if adj
                   else df[e].astype(float) / df[pop]
                   for e,pop,adj in zip(events, populations, adjusted)]
          names = ['-'.join((e,p)) for e,p in zip(events, populations)]
          out_df = df.copy()
          rate_df = out_df.from_items(list(zip(names, rates))) #trick to avoid importing pandas
          stat_df = _univariate_handler(rate_df, names, w=w, inplace=False,
                                        pvalue = pvalue, outvals = outvals,
                                        swapname=swapname,
                                        stat=Moran, #how would this get done w/super?
                                        **stat_kws)
          for col in stat_df.columns:
              df[col] = stat_df[col]