Subtiler Fehler in Pandas .Apply (Lambda G: G.shift (1, fill_value = 0) .Cumsum ())
Posted: 16 Feb 2025, 10:18
Ich habe einen Datenrahmen, der die Leistung von F1-Fahrern aufzeichnet, und es sieht aus wie < /p>
und ich möchte neue Spalten Total_wins erstellen, die die Anzahl der Siege des Fahrers vor dem heutigen Rennen zählt, sodass die gewünschte Spalte wie
Driver_ID Date Place Total_wins
1 2025-02-13 1 2
1 2024-12-31 1 1
1 2024-11-03 2 1
1 2023-01-01 1 0
2 2025-01-13 5 3
2 2024-12-02 1 2
2 2024-11-12 2 2
2 2023-11-12 1 1
2 2023-05-12 1 0
< /code>
Und hier ist mein Code: < /p>
win = (df.assign(Date=Date)
.sort_values(['Driver_ID','Date'], ascending=[True,True])
['Place'].eq(1))
df['Total_wins']=(win.groupby(df['Driver_ID'], group_keys=False).apply(lambda g: g.shift(1, fill_value=0).cumsum()))
< /code>
Also funktioniert der Code (meistens) in Ordnung. Ich habe meistens, weil ich das Ergebnis manuell überprüft habe und die meisten Ergebnisse korrekt sind, aber für ein paar Zeilen liefert es falsche Ergebnisse wie < /p>
Driver_ID Date Place Total_wins
1 2025-02-13 1 2
1 2024-12-31 1 4
1 2024-11-03 2 1
1 2023-01-01 1 0
< /code>
Ich habe versucht, es zu debuggen, aber ich konnte nichts falsch finden. Gibt es einen subtilen Fehler in meinem Code, der den Fehler verursacht hat? Oder was ist der mögliche Grund dafür? Mein ursprünglicher Datenrahmen ist riesig (~ 150000 Zeilen)
Vielen Dank im Voraus
Code: Select all
Driver_ID Date Place
1 2025-02-13 1
1 2024-12-31 1
1 2024-11-03 2
1 2023-01-01 1
2 2025-01-13 5
2 2024-12-02 1
2 2024-11-12 2
2 2023-11-12 1
2 2023-05-12 1
Driver_ID Date Place Total_wins
1 2025-02-13 1 2
1 2024-12-31 1 1
1 2024-11-03 2 1
1 2023-01-01 1 0
2 2025-01-13 5 3
2 2024-12-02 1 2
2 2024-11-12 2 2
2 2023-11-12 1 1
2 2023-05-12 1 0
< /code>
Und hier ist mein Code: < /p>
win = (df.assign(Date=Date)
.sort_values(['Driver_ID','Date'], ascending=[True,True])
['Place'].eq(1))
df['Total_wins']=(win.groupby(df['Driver_ID'], group_keys=False).apply(lambda g: g.shift(1, fill_value=0).cumsum()))
< /code>
Also funktioniert der Code (meistens) in Ordnung. Ich habe meistens, weil ich das Ergebnis manuell überprüft habe und die meisten Ergebnisse korrekt sind, aber für ein paar Zeilen liefert es falsche Ergebnisse wie < /p>
Driver_ID Date Place Total_wins
1 2025-02-13 1 2
1 2024-12-31 1 4
1 2024-11-03 2 1
1 2023-01-01 1 0
< /code>
Ich habe versucht, es zu debuggen, aber ich konnte nichts falsch finden. Gibt es einen subtilen Fehler in meinem Code, der den Fehler verursacht hat? Oder was ist der mögliche Grund dafür? Mein ursprünglicher Datenrahmen ist riesig (~ 150000 Zeilen)
Vielen Dank im Voraus