from typing import List
from functools import reduce


def apply_masks(df, masks: List):
    """
    Applies a list of boolean masks to a filter a data frame

    Parameters
    ----------
    df : `pandas.DataFrame`
        The DataFrame to filter
    masks:
        List of `pandas.Series` boolean filter masks

    Returns
    -------
    Filtered copy of the provided DataFrame
    """

    df = df.copy()
    mask = reduce(lambda i,j: i & j, masks)
    return df[mask]