Pandas Spalte: wieoft gleicher Wert hintereinander erscheint

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Bayne
User
Beiträge: 40
Registriert: Freitag 31. Mai 2019, 16:28

Hey,
könnte einen Weg brauchen, wie ich aus einem Pandas Dataframe eine spalte extrahieren kann, die anzeigt, wieoft der jetzige wert in den zeilen davor ununterbrochen angezeigt wurde.

Etwa nach dem Schema:

Code: Alles auswählen

df = pd.DataFrame([10, 10, 23, 23, 9, 9, 9, 10, 10, 10, 10, 12], columns=['RiseOrFall'])
der Output sollte dann sein:
0
1
0
1
0
1
2
0
1
2
3
0

Das Ziel ist eine neue Spalte wie oben zu erstellen der diesen Count als integer im Selben Index, wie der eigentliche Wert besitzt
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

Das könnte man so machen. Zuerst mußt Du herausfinden, ob der Wert vorher identisch war:

Code: Alles auswählen

same_as_before = df.diff()==0
Dann kann man per cumsum die True-Werte aufaddieren:

Code: Alles auswählen

summed = same_as_before.cumsum()
Jetzt wird aber über alle Werte addiert, so dass man den Offset, wenn von einer Zahl zur nächsten gesprungen wird, wieder abziehen muß. Diese Offsets bekommt man an den Stellen, wo same_as_before False ist:

Code: Alles auswählen

offsets = summed[~same_as_before]
Jetzt muß man nur noch die nan-Lücken füllen:

Code: Alles auswählen

offsets = offsets.fillna(method="pad")
Und von den aufsummierten Werten abziehen

Code: Alles auswählen

count = summed - offsets
Bayne
User
Beiträge: 40
Registriert: Freitag 31. Mai 2019, 16:28

Dankesehr :)
Antworten