def add_starvation(df_with_fairness):
    """Returns a data frame with a column `starved_mem_gb` which is the amount of gbs a user is starved.
    Starved is defined as amount of resources a user wants, below their share, that they aren't getting
    
    Parameters:
    -----------
    df_with_fairness : pandas.DataFrame
        A dataframe of usage (from intervalize usage) annotated with the fair allocation for each user at
        each time slice
        
    Returns:
    --------
    pandas.DataFrame
        df_with_fairness annotated with a column `starved_mem_gb`
    """
    df = df_with_fairness
    df["share_mem"] = 2.5e6
    df["starved_mem_gb"] = 0
    df.loc[df["mem_running"] < df.share_mem, "starved_mem_gb"] = (df[["mem_fair", "share_mem"]].min(axis=1) - df.mem_running)/1000
    df.loc[df["starved_mem_gb"] < 0, "starved_mem_gb"] = 0 # starved is on interval [0,share_mem]
    return df