def reverse_encode_df_cat_columns(df, encode_dict):
    """
    :Summary: Reverse the encodings of a dataframe back to its categorical variables.

    :param df: encoded dataframe
    :param encode_dict: nested dictionary that was used for encoding the original dataframe
    :return: dataframe that is now decoded
    """
    decode_dict = {}
    for feature in encode_dict.keys():
        decode_dict[feature] = {v: k for k, v in encode_dict[feature].items()}
    df_decoded = df.replace(decode_dict)
    df_decoded[list(encode_dict.keys())] = df_decoded[encode_dict.keys()].astype('string')
    return df_decoded