mam dataframe pandas z 2 kolumn tak:Wektoryzowane obliczanie wartości kolumny na podstawie poprzedniej wartości tej samej kolumny?
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
że ma tworzyć nową kolumnę C w następujący sposób: C [i] = C [i-1] -A [j] + B [i]
W tym question na zadane proponuje zastosowanie pętli tak:
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
który wykonuje pracę.
Ale ponieważ pętle są generalnie powolne w porównaniu do obliczeń wektorowych, Zastanawiam się, czy istnieje wektoryzowane rozwiązanie tego w pandach. (I to jest powód tego nowego pytania).
Próbowałem użyć metody shift jak ten
df['C'] = df['C'].shift(1).fillna(df['A']) - df['A'] + df['B']
ale to nie pomogło, ponieważ przesunięty kolumna C nie jest na bieżąco z obliczeń. Zachowuje swoje oryginalne wartości:
>>> df['C'].shift(1).fillna(df['A'])
0 10
1 10
2 2
3 3
4 4
5 5
i daje niepoprawny wynik.
Dzięki @ Happy001 działa idealnie. Jest to również przydatna lekcja na przyszłość: jeśli utkniesz, zrób trochę algebry i przemyśl swój problem. – dimyG