Ausgabe
Ich versuche, einen Pandas-Datenrahmen aus dem fastf1-Paket zu filtern. Ich möchte „Long Runs“ abrufen, das heißt, dass Rundenzeiten über mehrere Runden ähnlich sind.
Um dies zu tun, möchte ich nach dem Filtern alle Monotonie (die jedes Mal um 1 zunimmt) “Abschnitte” innerhalb eines Datenrahmens finden.
Ich habe die Rundenzeiten gefiltert, sodass die meisten irrelevanten Rundenzeiten aus dem Datenrahmen herausfallen, was Folgendes ergibt:
print(fp_d1[['LapNumber', 'LapTime']])
Ausgang:
LapNumber LapTime
1 2 0 days 00:01:25.230000
3 4 0 days 00:01:44.087000
4 5 0 days 00:01:23.449000
6 7 0 days 00:01:23.234000
8 9 0 days 00:01:22.853000
9 10 0 days 00:01:33.581000
11 12 0 days 00:01:22.840000
12 13 0 days 00:01:40.480000
14 15 0 days 00:01:26.013000
15 16 0 days 00:01:25.739000
16 17 0 days 00:01:25.621000
17 18 0 days 00:01:25.750000
18 19 0 days 00:01:25.681000
19 20 0 days 00:01:25.556000
20 21 0 days 00:01:25.832000
21 22 0 days 00:01:25.669000
22 23 0 days 00:01:25.450000
23 24 0 days 00:01:25.408000
24 25 0 days 00:01:25.694000
Von hier aus möchte ich eine Funktion erstellen, die in diesem Fall nur die Runden 15-25 zurückgibt.
Jede Hilfe wäre willkommen, wenn weitere Informationen gegeben werden müssen, lassen Sie es mich bitte auch wissen.
Lösung
Hier ist eine mögliche Lösung.
Ich habe die Bedingung hinzugefügt, dass mehr als 2 Zeilen hintereinander vorhanden sein müssen, um in der gewünschten Ausgabe vorhanden zu sein:
condition = df['LapNumber'].diff().eq(1)
mask = condition.ne(condition.shift(-1)).cumsum()
print(mask)
out = df[df.groupby(mask)['LapNumber'].transform('count') > 2]
print(out)
Ausgabe:
LapNumber LapTime
14 15 0 days 00:01:26.013000
15 16 0 days 00:01:25.739000
16 17 0 days 00:01:25.621000
17 18 0 days 00:01:25.750000
18 19 0 days 00:01:25.681000
19 20 0 days 00:01:25.556000
20 21 0 days 00:01:25.832000
21 22 0 days 00:01:25.669000
22 23 0 days 00:01:25.450000
23 24 0 days 00:01:25.408000
Beantwortet von – Rabinzel
Antwort geprüft von – Marie Seifert (FixError Admin)