docstr: Filters for releases that are on or after each simulation date and
  determines the previous quarter by picking out the most recent
  release relative to each date in the index.
  
  Parameters
  ----------
  stacked_last_per_qtr : pd.DataFrame
      A DataFrame with index of calendar dates, sid, and normalized
      quarters with each row being the latest estimate for the row's
      index values, sorted by event date.
  
  Returns
  -------
  previous_releases_per_date_index : pd.MultiIndex
      An index of calendar dates, sid, and normalized quarters, for only
      the rows that have a previous event.
docstr_tok: ["Filters","for","releases","that","are","on","or","after","each","simulation","date","and","determines","the","previous","quarter","by","picking","out","the","most","recent","release","relative","to","each","date","in","the","index",".","Parameters","--","--","--","--","--","stacked_last_per_qtr",":","pd.DataFrame","A","DataFrame","with","index","of","calendar","dates",",","sid",",","and","normalized","quarters","with","each","row","being","the","latest","estimate","for","the","row's","index","values",",","sorted","by","event","date",".","Returns","--","--","--","-","previous_releases_per_date_index",":","pd.MultiIndex","An","index","of","calendar","dates",",","sid",",","and","normalized","quarters",",","for","only","the","rows","that","have","a","previous","event","."]
code: def get_zeroth_quarter_idx(self, stacked_last_per_qtr):
      """
      Filters for releases that are on or after each simulation date and
      determines the previous quarter by picking out the most recent
      release relative to each date in the index.
  
      Parameters
      ----------
      stacked_last_per_qtr : pd.DataFrame
          A DataFrame with index of calendar dates, sid, and normalized
          quarters with each row being the latest estimate for the row's
          index values, sorted by event date.
  
      Returns
      -------
      previous_releases_per_date_index : pd.MultiIndex
          An index of calendar dates, sid, and normalized quarters, for only
          the rows that have a previous event.
      """
      previous_releases_per_date = (
          stacked_last_per_qtr.loc[
              stacked_last_per_qtr[EVENT_DATE_FIELD_NAME]
              <= stacked_last_per_qtr.index.get_level_values(
                  SIMULATION_DATES
              )
          ]
          .groupby(
              level=[SIMULATION_DATES, SID_FIELD_NAME],
              as_index=False,
              # Here we take advantage of the fact that `stacked_last_per_qtr` is
              # sorted by event date.
          )
          .nth(-1)
      )
      return previous_releases_per_date.index
  
imports: from abc import abstractmethod, abstractproperty
  import numpy
  import pandas
  from six import viewvalues
  from toolz import groupby
  from catalyst.lib.adjusted_array import AdjustedArray
  from catalyst.lib.adjustment import Datetime641DArrayOverwrite, Datetime64Overwrite, Float641DArrayOverwrite, Float64Multiply, Float64Overwrite
  from catalyst.pipeline.common import EVENT_DATE_FIELD_NAME, FISCAL_QUARTER_FIELD_NAME, FISCAL_YEAR_FIELD_NAME, SID_FIELD_NAME, TS_FIELD_NAME
  from catalyst.pipeline.loaders.base import PipelineLoader
  from catalyst.utils.numpy_utils import datetime64ns_dtype, float64_dtype
  from catalyst.pipeline.loaders.utils import ffill_across_cols, last_in_date_group
label_desc: Use image node_id 3 for calling the PreviousEarningsEstimatesLoader obj's underlying member method code with example usage: obj.get_zeroth_quarter_idx(stacked_last_per_qtr) and returns: previous_releases_per_date