Ausgabe
Ich möchte die erste Zeile (Zeile 0) überspringen, die den Wert ‘100’ in ‘index_100’ enthält, und mit der Berechnung ab Zeile 1 beginnen. Meine Berechnung verwendet die erste Zeile.
Wenn ich ab der zweiten Reihe beginnen kann, wäre dies meine Funktion:
df['index_100'] = ((df['index_100']).shift(1))*(df['close'])/(df['prev_close'])
Mein DF ist so:
symbol timestamp close index_100 prev_close
0 BTCUSDT 1665187200000 19537.11 100 NaN
1 BTCUSDT 1665187500000 19559.57 100 19537.11
2 BTCUSDT 1665187800000 19561.30 100 19559.57
3 BTCUSDT 1665188100000 19568.50 100 19561.30
4 BTCUSDT 1665188400000 19608.70 100 19568.50
5 BTCUSDT 1665188700000 19593.45 100 19608.70
Erwartetes Ergebnis:
symbol timestamp close index_100 prev_close
0 BTCUSDT 1665187200000 19537.11 100 NaN
1 BTCUSDT 1665187500000 19559.57 100.1149607081 19537.11
2 BTCUSDT 1665187800000 19561.30 100.1238156513100 19559.57
3 BTCUSDT 1665188100000 19568.50 100.1606685943 19561.30
4 BTCUSDT 1665188400000 19608.70 100.366430859 19568.50
5 BTCUSDT 1665188700000 19593.45 100.2883742785 19608.70
Lösung
Etwas wie:
df['index_100'] = df['index_100'].mul(df['close']).div(df['close'].shift().bfill())
Ausgang:
symbol timestamp close index_100 prev_close
0 BTCUSDT 1665187200000 19537.11 100.000000 NaN
1 BTCUSDT 1665187500000 19559.57 100.114961 19537.11
2 BTCUSDT 1665187800000 19561.30 100.008845 19559.57
3 BTCUSDT 1665188100000 19568.50 100.036807 19561.30
4 BTCUSDT 1665188400000 19608.70 100.205432 19568.50
5 BTCUSDT 1665188700000 19593.45 99.922228 19608.70
Beantwortet von – mozway
Antwort geprüft von – Robin (FixError Admin)