code: def covariates_from_event_matrix(df, id_col):
      
      df = df.set_index(id_col)
      df = df.stack().reset_index()
      df.columns = [id_col, "event", "duration"]
      df["_counter"] = 1
      return df.pivot_table(index=[id_col, "duration"], columns="event", fill_value=0)["_counter"].reset_index()
docs: This is a helper function to handle binary event datastreams in a specific format and convert
      it to a format that add_covariate_to_timeline will accept. For example, suppose you have a
      dataset that looks like:
  
      .. code:: python
  
             id  promotion  movement  raise
          0   1        1.0       NaN    2.0
          1   2        NaN       5.0    NaN
          2   3        3.0       5.0    7.0
  
  
      where the values (aside from the id column) represent when an event occurred for a specific user, relative
      to the subject's birth/entry. This is a common way format to pull data from a SQL table. We call this a duration matrix, and we
      want to convert this DataFrame to a format that can be included in a long form DataFrame
      (see add_covariate_to_timeline for more details on this).
  
      The duration matrix should have 1 row per subject (but not necessarily all subjects).
  
      Parameters
      ----------
      df: DataFrame
        the DataFrame we want to transform
      id_col: string
        the column in long_form_df and cv representing a unique identifier for subjects.
  
      Example
      -------
  
      >>> cv = covariates_from_event_matrix(duration_df, 'id')
      >>> long_form_df = add_covariate_to_timeline(long_form_df, cv, 'id', 'duration', 'e', cumulative_sum=True)