Я нашел ответ на свой вопрос. В основном, у seaborn и Matplotlib нет никаких настроек для них, и вы должны разделить свой фрейм данных самостоятельно. То, что я сделал, это групповое соединение с последующим соединением SQL. Надеюсь, что это поможет любому, кто столкнулся с той же проблемой в будущем.
df_to_join = mo_finaldf.groupby(['time_window', 'ID']).agg({"time": {'Mean': 'mean', 'var': 'var'}})\
['time'].sort_values(by='Mean', ascending=False).sort_index(level='time_window', sort_remaining=False)
highest_5_mean = df_to_join.groupby(['time_window']).head(5).copy()
highest_5_mean.reset_index(inplace=True)
highest_5_mean.rename(columns={'time': 'Mean'}, inplace=True)
dataset_filtered = pd.merge(mo_finaldf, highest_5_mean, how='inner', left_on=['time_window', 'tap'],
right_on=['time_window', 'ID'])
sns.catplot(x='time_window', hue='tap', y='time', data=dataset_filtered, kind="box",
showfliers=False)