def find_outlier_bounds(df, col_to_check, groupby=None):
    """Calculate upper and lower outlier bounds.

    Outliers are defined as data points 1.5x the interquartile range
        for all other data with matching ParseKey parameters,
        NOT for the total dataset.

    Parameters
    ----------
    df : a pandas DataFrame
    col_to_check : str
        the name of a column in df in which to check for outliers
    groupby : str or list, optional
        a column name or list of column names by which to group df before 
        calculating outliers separately

    Returns
    -------
    a tuple (lower_outlier_bound, upper_outlier_bound) where each position 
    contains a pandas Series, indexed by groupby column(s) if provided (multiple 
    columns will result in a multiindex)
    """

    if groupby == None:
        grouped = df
    else:
        grouped = df.groupby(groupby)

    percentile_75 = grouped[col_to_check].quantile(0.75)
    percentile_25 = grouped[col_to_check].quantile(0.25)

    interquartile_range = percentile_75 - percentile_25
    lower_outlier_bound = percentile_25 - 1.5 * interquartile_range
    upper_outlier_bound = percentile_75 + 1.5 * interquartile_range

    return lower_outlier_bound, upper_outlier_bound