Ich habe einen Datenrahmen mit drei Säulen, t
, b
und h
:Pandas heikel innere Spalte Logik
t b h
0 NaN False 6
1 6.023448 False 38
2 12.996233 False 46
3 2.484907 False 67
4 5.062595 False 81
5 4.624973 False 82
6 3.367296 False 38
7 3.688879 False 53
8 6.926577 True 38
9 14.972346 False 81
10 14.442651 False 78
11 3.367296 False 67
12 5.236442 False 46
13 5.298317 True 8
und ich mag eine neue Spalte erzeugen, die den Wert jede Instanz von h
ausbreitet für welche b==True
, rückwärts, und nur bis zum nächsten solchen Fall oder das erste Auftreten von t>9.5
. Der Rest gefüllt mit NaN
's. Hier ist ein Beispiel für die Ausgabe, die ich brauche:
t b h i
0 NaN False 6 NaN
1 6.023448 False 38 NaN
2 12.996233 False 46 38
3 2.484907 False 67 38
4 5.062595 False 81 38
5 4.624973 False 82 38
6 3.367296 False 38 38
7 3.688879 False 53 38
8 6.926577 True 38 38
9 14.972346 False 81 NaN
10 14.442651 False 78 8
11 3.367296 False 67 8
12 5.236442 False 46 8
13 5.298317 True 8 8
Ich möchte vermeiden, über Zeilen zu iterieren, weil ich Millionen von ihnen habe. Ich versuchte, die b==True
Fälle mit where
und dann fillna
mit bfill Option zu erhalten, aber kann ihm nicht sagen, wann man anfängt zu füllen. Außerdem wird diese apply
‚ed zu einzelnen Gruppen werden innerhalb eines groupby
, so brauche ich eine Funktion, die eine Spalte mit ihrem Argument addiert und gibt den gesamten Rahmen
def get_i(x):
x['i']=x['h'].where(x['b']==True).fillna(value=None,method='backfill').dropna()
return x
schöne Lösung! – MaxU
schön und elegant –
Vielen Dank für die Annahme. – jezrael