DataFrame do Pandas selecionando grupos com cardinalidade mínima

Tenho um problema em que preciso obter grupos de linhas de um quadro de dados em que o número de itens em um grupo excede um determinado número (ponto de corte). Para esses grupos, preciso fazer algumas fileiras de cabeça e de cauda.

Estou usando o código abaixo

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

Isso funciona. Mas a primeira linha, é muito lenta :(. 30 minutos ou mais.

Existe alguma maneira de tornar a primeira linha mais rápida? Se eu não usar a primeira linha, há índices duplicados no resultado da segunda linha, o que atrapalha as coisas.

Agradecemos antecipadamente Atenciosamente

Nota: Meu quadro de dados de trem possui cerca de 70.000 grupos de tamanhos variados em cerca de 700.000 linhas. Na verdade, segue da minha outra pergunta, como pode ser visto aquiProcessamento de dados com adição dinâmica de colunas no Dataframe do Python Pandas. Jeff deu uma ótima resposta lá, mas falha se o tamanho do grupo for menor ou igual ao parâmetro que eu passo na cabeça (parâmetro) ao concatenar minhas linhas como na resposta de Jeffs: Em [31]: groups = concat .....

questionAnswers(1)

yourAnswerToTheQuestion