def filter_function(g):
    """Called by filter, g is the grouped dataframe"""
l = g['foo']
return sum([(x < threshold) for x in l]) >= n_below and sum([(x > threshold
    ) for x in l]) >= n_above
df.groupby('bar').filter(filter_function)
Отфильтровать группы, в которых нет достаточного количества строк, удовлетворяющих условию