def apply_agg(df, group_by, column_operations):
    """Pass in a dict of key values for columns and operations

    {'A': 'sum', 'B': 'std', 'C': 'mean'}

    Args:
        df (`pandas.DataFrame`): The dataframe to apply aggregation to
        group_by (str): The group by operation to apply to `df`
        column_operations (dict): The operations to apply and on which columns

    Returns:
        `pandas.DataFrame`: `df` with aggregation applied
    """

    # Taken from operations that can be performed on columns as described here:
    # http://pandas.pydata.org/pandas-docs/dev/generated/pandas.DataFrame.html
    valid_operations = (
        'mean', 'median', 'mode',
        'sum', 'std', 'var', 'size', 'first', 'last', 'prod', 'product',
        'min', 'max', 'abs', 'quantile',
        'skew',  # Return unbiased skew over requested axis
        'kurtosis',  # Return unbiased kurtosis over requested axis
        'mad',  # Return the mean absolute deviation of the values for the requested axis
        'cumsum',  # Return cumulative sum over requested axis
        'cummin',  # Return cumulative min over requested axis.
        'cummax',  # Return cumulative max over requested axis.
        'cumprod'  # Return cumulative prod over requested axis.
    )

    final = {}
    for co in column_operations.keys():
        if column_operations[co] in valid_operations:
            final[co] = column_operations[co]

    return df.groupby(group_by).agg(final).reset_index()