def normalize_column(df, column_name, new_column_name=None):
    """
    Normalize the given column in the given DatFrame linearly between 0 and 1.
    If no new_column_name is given the original data will be replaced.

    :param df: a pandas data frame that contains at least the given column_name
    :param column_name: a string that specifies the column name that should be normalized
    :param new_column_name: a string that specifies the column name of the normalized values
    :return: pandas DataFrame
    """

    if new_column_name is None:
        new_column_name = column_name

    column_min = df[column_name].min()
    column_max = df[column_name].max()

    # linear normalization
    df.loc[:, new_column_name] = (df[column_name] - column_min) / (column_max - column_min)
    return df