Сначала получите минимальное время на канал, затем выберите все каналы, где минимальное время меньше указанного порогового значения (в данном примере 300 с = 5 мин = datetime.time (0,5,0))
import datetime
grp = df.groupby('ch_name').time.min().dt.time
df = df[df.ch_name.isin(grp[grp <= datetime.time(0,5,0)].index)]
Обновление для максимального времени:
После фильтрации в течение минимума сделайте то же самое для максимума:
grp = df.groupby('ch_name').time.max().dt.time
df = df[df.ch_name.isin(grp[grp >= datetime.time(23,55,0)].index)]