def compute_52_week_range(df, column_source_low, column_source_high, column_target_low, column_target_high):
    """
    Compute 52 Week Range (Low~High).

    :param df: dataframe (sorted in ascending time order)
    :param column_source_low: name of source column in dataframe with low values to compute
    :param column_source_high: name of source column in dataframe with high values to compute
    :param column_target_low: name of target column in dataframe for low range results to add to dataframe
    :param column_target_high: name of target column in dataframe for high range results to add to dataframe
    :return: modified dataframe
    """

    # compute rolling 52 week range and add result back to dataframe
    df[column_target_low] = df[column_source_low].asfreq("D").rolling(window=52*7, min_periods=1).min();
    df[column_target_high] = df[column_source_high].asfreq("D").rolling(window=52*7, min_periods=1).max();

    return df