def zscore_outliers(data, column, n):
    """
    Tag outliers in dataset in regard from a specific column
    As an empirical rule, often 3 std from the mean is consider as an outlier
    Return two boolean columns : upper_outlier and lower_outlier
    """

    outliers = data[(data[column] != 0)]

    # we aggregate value by cantine and annee in order to have
    # a meaningfull outlier detection system and compare what's comparable
    outliers = outliers.groupby(["cantine_nom", "annee_scolaire"])
    outliers = outliers[column].agg(["mean", "std"])

    outliers["lower_bound"] = outliers["mean"] - (n * outliers["std"])
    outliers["upper_bound"] = outliers["mean"] + (n * outliers["std"])

    data = data.merge(
        outliers,
        left_on=["cantine_nom", "annee_scolaire"],
        right_index=True,
        how="left",
    )

    data["upper_outlier"] = data[column] > data["upper_bound"]
    data["lower_outlier"] = data[column] < data["lower_bound"]

    data.drop(["upper_bound", "lower_bound", "mean", "std"], axis=1, inplace=True)

    return data