code: def make_fourier_series_df(
      df, period, order=3, prefix="", suffix="", shift=0
  ):
      """Given a data-frame, cyclical period and order, return a set of fourier series in a dataframe.
  
      Parameters
      ----------
      df : pd.DataFrame
          Input dataframe to supply datetime array for generating fourier series
      period : int
          Length of a cyclical period. E.g., with daily data, `period = 7` means weekly seasonality.
      order : int
          Number of components for each sin() or cos() series.
      prefix : str
          prefix of output columns label
      suffix : str
          suffix of output columns label
      shift : int
          shift of time step/index to generate the series
      Returns
      -------
      out : pd.DataFrame
          data with computed fourier series attached
      fs_cols : list
          list of labels derived from fourier series
      Notes
      -----
          This is calling :func:`make_fourier_series`
      """
      fs = make_fourier_series(
          df.shape[0], period, order=order, shift=shift
      )
      fs_cols = []
      for i in range(1, order + 1):
          fs_cols.append("{}fs_cos{}{}".format(prefix, i, suffix))
          fs_cols.append("{}fs_sin{}{}".format(prefix, i, suffix))
      fs_df = pd.DataFrame(fs, columns=fs_cols)
      out = pd.concat([df.reset_index(drop=True), fs_df], axis=1)
      return out, fs_cols
  
file_path: orbit/orbit/utils/features.py
imports: import numpy
  import pandas
  from orbit.exceptions import IllegalArgument
label_desc: Use image node_id 2 for calling a global function with example usage: make_fourier_series_df(df, period, order, prefix, suffix, shift) and returns: out,  fs_cols