code: def resample(df, rule, time_index, groupby=None, aggregation='mean'):
      
      if groupby:
          df = df.groupby(groupby)
  
      df = df.resample(rule, on=time_index)
      df = getattr(df, aggregation)()
      for column in groupby:
          del df[column]
  
      return df
docs: pd.DataFrame.resample adapter.
  
      Call the `df.resample` method on the given time_index
      and afterwards call the indicated aggregation.
  
      Optionally group the dataframe by the indicated columns before
      performing the resampling.
  
      If groupby option is used, the result is a multi-index datagrame.
  
      Args:
          df (pandas.DataFrame): DataFrame to resample.
          rule (str): The offset string or object representing target conversion.
          groupby (list): Optional list of columns to group by.
          time_index (str): Name of the column to use as the time index.
          aggregation (str): Name of the aggregation function to use.
  
      Returns:
          pandas.Dataframe: resampled dataframe