Pandas Dataframe-Auswahlgruppen mit minimaler Kardinalität

Ich habe ein Problem, bei dem ich Zeilengruppen aus einem Datenrahmen ziehen muss, bei dem die Anzahl der Elemente in einer Gruppe eine bestimmte Anzahl überschreitet (Cutoff). Für diese Gruppen muss ich einige Kopf- und Schwanzreihen nehmen.

Ich benutze den Code unten

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

Das funktioniert. Aber die erste Zeile ist sehr langsam :(. 30 Minuten oder mehr.

Gibt es eine Möglichkeit, die erste Zeile schneller zu machen? Wenn ich die erste Zeile nicht benutze, gibt es doppelte Indizes aus dem Ergebnis der zweiten Zeile, was die Dinge durcheinander bringt.

Vielen Dank im Voraus Grüße

Hinweis: Mein Zugdatenrahmen enthält ungefähr 70.000 Gruppen unterschiedlicher Gruppengröße in ungefähr 700.000 Zeilen. Das ergibt sich eigentlich aus meiner anderen Frage, wie man hier sehen kannDatenverarbeitung mit dynamischem Hinzufügen von Spalten in Python Pandas Dataframe. Jeff hat dort eine großartige Antwort gegeben, aber es schlägt fehl, wenn die Gruppengröße kleiner oder gleich dem Parameter ist, den ich bei der Verkettung meiner Zeilen in head (parameter) übergebe, wie in Jeffs Antwort: In [31]: groups = concat .....

Antworten auf die Frage(1)

Ihre Antwort auf die Frage