code: def _generate_output_dataframe(data_subset, defaults):
      
      # The columns provided.
      cols = set(data_subset.columns)
      desired_cols = set(defaults)
  
      # Drop columns with unrecognised headers.
      data_subset.drop(cols - desired_cols,
                       axis=1,
                       inplace=True)
  
      # Get those columns which we need but
      # for which no data has been supplied.
      for col in desired_cols - cols:
          # write the default value for any missing columns
          data_subset[col] = defaults[col](data_subset, col)
  
      return data_subset
docs: Generates an output dataframe from the given subset of user-provided
      data, the given column names, and the given default values.
  
      Parameters
      ----------
      data_subset : DataFrame
          A DataFrame, usually from an AssetData object,
          that contains the user's input metadata for the asset type being
          processed
      defaults : dict
          A dict where the keys are the names of the columns of the desired
          output DataFrame and the values are a function from dataframe and
          column name to the default values to insert in the DataFrame if no user
          data is provided
  
      Returns
      -------
      DataFrame
          A DataFrame containing all user-provided metadata, and default values
          wherever user-provided metadata was missing