Pass the provided series obj through each recoder function sequentially and return the final result.

        Args:
            table (pd.DataFrame): A dataframe on which to apply recoding logic.
            validate (bool): If ``True``, recoded table must pass validation tests.

def recode(self, table: pd.DataFrame, validate=False) -> pd.DataFrame:
        """Pass the provided series obj through each recoder function sequentially and return the final result.

        Args:
            table (pd.DataFrame): A dataframe on which to apply recoding logic.
            validate (bool): If ``True``, recoded table must pass validation tests.
        """
        series = table[self.name]

        self._check_series_name(series)

        col = self.name

        data = series.copy()

        for recoder in self.recoders.values():
            try:
                data = recoder(data)
            except (BaseException) as err:
                raise RecodingError(col, recoder, err)

        if validate:
            failed_rows = find_failed_rows(self.validate(data.to_frame()))
            if failed_rows.shape[0] > 0:
                raise ValidationError(f"Rows that failed to validate for column '{self.name}':\n{failed_rows}")

        return data.to_frame()