[FIXED] Gibt es eine Möglichkeit, Monotonieabschnitte in einer Liste in Python zu identifizieren und zurückzugeben?

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)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like