Pandas Dataframe выбирает группы с минимальным количеством элементов

У меня есть проблема, когда мне нужно взять группы строк из фрейма данных, где количество элементов в группе превышает определенное количество (отсечение). Для этих групп мне нужно взять несколько рядов головы и хвостового ряда.

Я использую код ниже

train = train[train.groupby('id').id.transform(len) > headRows]
groups = pd.concat([train.groupby('id').head(headRows),train.groupby('id').tail(1)]).sort_index()

Это работает. Но первая строка, это очень медленно :(. 30 минут и более.

Есть ли способ сделать первую строчку быстрее? Если я не использую первую строку, из результата второй строки появляются дублирующиеся индексы, которые запутывают вещи.

Спасибо заранее С уважением

Примечание. В моем фрейме данных о поездах содержится около 70 000 групп с разным размером, а количество строк - около 700 000. Это фактически следует из моего другого вопроса, как можно увидеть здесьОбработка данных с динамическим добавлением столбцов в Python Dataframe Pandas, Джефф дал там отличный ответ, но он потерпел неудачу, если размер группы меньше или равен параметру, который я передаю в голове (параметре) при объединении моих строк, как в ответе Джеффса: В [31]: groups = concat .....