code: def undo_transform(self, df: DataFrame) -> DataFrame:
      ucols = [self.partition_key, self.output_col]
      vocab_df = self._vocab_df
  
      return df.join(vocab_df, on=ucols, how="left_outer")
  
imports: from typing import List
  from synapse.ml.cyber.utils.spark_utils import DataFrameUtils, ExplainBuilder, HasSetInputCol, HasSetOutputCol
  from pyspark.ml import Estimator, Transformer
  from pyspark.ml.param.shared import HasInputCol, HasOutputCol, Param, Params
  from pyspark.sql import DataFrame, functions
label_desc: Use image node_id 2 for calling the IdIndexerModel obj's underlying member method code with example usage: obj.undo_transform(df) and returns: df