def assign_col(df, assignments={}, evals={}, drop_cols=[]):
    """
    Add or change columns by assigning or evaluating new ones
    """
    for key, value in evals.items():
        df[key] = df.eval(value)

    if assignments:
        df = df.assign(**assignments)

    if drop_cols:
        df.drop(drop_cols, axis="columns", inplace=True)
    return df