Ich versuche einen Weg zu finden, eine kumulative Summe zu erstellen, die Verbindungen in Pandas berücksichtigt.Kumulatives Ranking von Werten in Pandas mit Bindungen
Lassen Sie uns hypothetische Daten von einem Track treffen, wo ich Leute, Rennen, Heats und Zeit habe.
Platzierung Jeder Person wird entsprechend den folgenden:
Für eine gegebene Rasse/Wärme Kombination:
- Die Person Person mit der niedrigsten Zeit
- Die Person mit der zweitniedrigsten Zeit zuerst platziert zweiter wurde
und so weiter ...
Dies wäre ziemlich einfach Code, aber für eine Sache ..
Wenn zwei Menschen die gleiche Zeit haben, erhalten sie beide den gleichen Ort und dann das nächste Mal größer als ihre Zeit wird diesen Wert +1 als Platzierung haben .
In der Tabelle unten für 100 Meter-Lauf, Wärme 1, Runner1 zuerst abgeschlossen, RUNNER2/RUNNER3 fertig zweiten und RUNNER3 Dritter (nächstes Mal nach RUNNER2/RUNNER3)
Also im Grunde ist die Logik wie folgt:
Wenn Rennen <> race.shift() oder Wärme <> heat.shift(), dann = 1 setzen
Wenn race = race.shift() und Wärme = heat.shift() und Zeit> time.shift dann place = place.shift() + 1
Wenn race = race.shift() und Wärme = heat.shift() und time> time.shift dann place = place.shift()
Der Teil, der mich verwirrt, ist, wie man mit den Bindungen umgeht. Sonst könnte ich etwas wie
df['Place']=np.where(
(df['race']==df['race'].shift())
&
(df['heat']==df['heat'].shift()),
df['Place'].shift()+1,
1)
Vielen Dank!
Beispieldaten folgt:
Person,Race,Heat,Time
RUNNER1,100 Yard Dash,1,9.87
RUNNER2,100 Yard Dash,1,9.92
RUNNER3,100 Yard Dash,1,9.92
RUNNER4,100 Yard Dash,1,9.96
RUNNER5,100 Yard Dash,1,9.97
RUNNER6,100 Yard Dash,1,10.01
RUNNER7,100 Yard Dash,2,9.88
RUNNER8,100 Yard Dash,2,9.93
RUNNER9,100 Yard Dash,2,9.93
RUNNER10,100 Yard Dash,2,10.03
RUNNER11,100 Yard Dash,2,10.26
RUNNER7,200 Yard Dash,1,19.63
RUNNER8,200 Yard Dash,1,19.67
RUNNER9,200 Yard Dash,1,19.72
RUNNER10,200 Yard Dash,1,19.72
RUNNER11,200 Yard Dash,1,19.86
RUNNER12,200 Yard Dash,1,19.92
, was ich am Ende wollen, ist
Person,Race,Heat,Time,Place
RUNNER1,100 Yard Dash,1,9.87,1
RUNNER2,100 Yard Dash,1,9.92,2
RUNNER3,100 Yard Dash,1,9.92,2
RUNNER4,100 Yard Dash,1,9.96,3
RUNNER5,100 Yard Dash,1,9.97,4
RUNNER6,100 Yard Dash,1,10.01,5
RUNNER7,100 Yard Dash,2,9.88,1
RUNNER8,100 Yard Dash,2,9.93,2
RUNNER9,100 Yard Dash,2,9.93,2
RUNNER10,100 Yard Dash,2,10.03,3
RUNNER11,100 Yard Dash,2,10.26,4
RUNNER7,200 Yard Dash,1,19.63,1
RUNNER8,200 Yard Dash,1,19.67,2
RUNNER9,200 Yard Dash,1,19.72,3
RUNNER10,200 Yard Dash,1,19.72,3
RUNNER11,200 Yard Dash,1,19.86,4
RUNNER12,200 Yard Dash,1,19.92,4
[Bearbeiten] Nun noch einen Schritt weiter ..
vermuten lässt, dass Sobald ich einen Satz eindeutiger Werte belasse, werden die Werte beim nächsten Aufrufen des Sets auf 1 zurückgesetzt.
Also, zum Beispiel, - Beachten Sie, dass es geht auf "Wärme 1" und dann "Wärme 2" und zurück zu "Wärme 1" - Ich möchte nicht, dass die Rankings von der vorherigen "Wärme 1" fortsetzen, Ich möchte, dass sie zurückgesetzt werden.
Person,Race,Heat,Time,Place
RUNNER1,100 Yard Dash,1,9.87,1
RUNNER2,100 Yard Dash,1,9.92,2
RUNNER3,100 Yard Dash,1,9.92,2
RUNNER4,100 Yard Dash,2,9.96,1
RUNNER5,100 Yard Dash,2,9.97,2
RUNNER6,100 Yard Dash,2,10.01,3
RUNNER7,100 Yard Dash,1,9.88,1
RUNNER8,100 Yard Dash,1,9.93,2
RUNNER9,100 Yard Dash,1,9.93,2
speichern Sie einfach die letzte Läuferzeit im Speicher (wie ein Puffer) und überprüfen Sie die aktuelle gegen ihn (wie Sie zwei Schwimmer mit etwas Genauigkeit e vergleichen würden). Wenn die Differenz unter e liegt, erhöhen Sie die Position nicht. –
Wie würde ich das tun? Danke –