Python - Wie führe ich die folgende Operation im Python-Datenrahmen aus?
Nov 08 2020
unten ist mein df
df = pd.DataFrame({
'Sr. No': [1, 2, 3, 4, 5, 6],
'val1' : [2,3,2,4,1,2],
})
Ich möchte den Wert val2 wie in den folgenden Abbildungen gezeigt. Zeile1 ist dieselbe wie Zeile1 von Wert1, aber Zeile2 und darunter wird wie gezeigt unter Verwendung einer Formel berechnet
Antworten
1 mlang Nov 08 2020 at 12:34
Alle Zeilen sind also von den vorherigen abhängig, da C4 beispielsweise von der Berechnung von C3 abhängt. Wir können also die numpy-Arrays direkt bearbeiten.
sr_no_vals = df['Sr. No'].values
val1_vals = df['val1'].values
val2_vals = [val1_vals[0]]
for i in range(1, len(sr_no_vals)):
calculated_value = (((1 + val2_vals[i - 1]) ** sr_no_vals[i - 1]) * (1 + val1_vals[i])) ** (1 / sr_no_vals[i])
val2_vals.append(calculated_value)
df['val2'] = val2_vals
Wenn Sie mit Numpy-Arrays arbeiten, können Sie auch einen Just-in-Time-Compiler wie Numba verwenden, um den Betrieb für große Datenmengen um einen großen Faktor zu beschleunigen.
@numba.jit(nopython=True)
def calc_val2(val1_vals, sr_no_vals):
val2_vals = [val1_vals[0]]
for i in range(1, len(sr_no_vals)):
calculated_value = (((1 + val2_vals[i - 1]) ** sr_no_vals[i - 1]) * (1 + val1_vals[i])) ** (1 / sr_no_vals[i])
val2_vals.append(calculated_value)
return val2_vals
df['val2'] = calc_val2(val1_vals, sr_no_vals)