Ho un dataframe panda con 2 colonne in questo modo:Calcolo vettorializzato del valore di una colonna in base a un valore precedente della stessa colonna?
df = pd.DataFrame(data={'A': [10, 2, 3, 4, 5, 6], 'B': [0, 1, 2, 3, 4, 5]})
>>> df
A B
0 10 0
1 2 1
2 3 2
3 4 3
4 5 4
5 6 5
voglio creare una nuova colonna C nel modo seguente: C [i] = C [i-1] -A [i] + B [i]
In questo question la risposta propone l'uso di un ciclo come questo:
df['C'] = df['A']
for i in range(1, len(df)):
df['C'][i] = df['C'][i-1] - df['A'][i] + df['B'][i]
>>> df
A B C
0 10 0 10
1 2 1 9
2 3 2 8
3 4 3 7
4 5 4 6
5 6 5 5
che fa il lavoro.
Ma poiché i cicli sono generalmente lenti rispetto ai calcoli vettorizzati, mi chiedevo se esiste una soluzione vettoriale per questo nei panda. (E questa è la ragione di questa nuova domanda).
ho cercato di utilizzare il metodo di spostamento come questo
df['C'] = df['C'].shift(1).fillna(df['A']) - df['A'] + df['B']
ma non ha aiutato dal momento che la colonna C spostato non viene aggiornato con il calcolo. Mantiene i valori originali:
>>> df['C'].shift(1).fillna(df['A'])
0 10
1 10
2 2
3 3
4 4
5 5
e che produce un risultato errato.
Grazie @ Happy001 funziona perfettamente. È anche una lezione utile per il futuro: se sei bloccato, fai qualche algebra e ripensa il tuo problema. – dimyG