После нескольких часов попыток узнать, как это сделать, я обращаюсь к сообществу.
Я начинаю со следующего:
perf
date
2018-06-01 0.012923
2018-06-02 0.039364
2018-06-03 0.042805
2018-06-04 -0.033214
2018-06-05 -0.021745
Необходимо рассчитать совокупныйпроцентное изменение в новом столбце, но необходимо убедиться, что в расчете используется 100 в качестве начального значения.Итак, я добавляю одну строку к 100:
perf pct_change
date
2018-05-31 NaN 100.0
2018-06-01 0.012923 NaN
2018-06-02 0.039364 NaN
2018-06-03 0.042805 NaN
2018-06-04 -0.033214 NaN
Что мне нужно получить, это:
perf pct_change
date
2018-05-31 NaN 100.0
2018-06-01 0.012923 101.2923
2018-06-02 0.039364 105.2795701
2018-06-03 0.042805 109.7860621
2018-06-04 -0.033214 106.1396278
Формула что-то вроде pct_change = previous_days_pct_change * ( 1 + perf )
Я пробовал несколько разных подходов, включая for ... in
цикл безуспешно.
# INCOMPLETE/DOES NOT WORK (adding for illustration purposes only)
for index, row in performance.iterrows():
curr = performance.loc[index, 'perf']
pidx = index + pd.DateOffset(-1)
prev = performance.iloc[[pidx], 'pct_change']
performance.loc[index, 'pct_change'] = prev * ( 1 + curr )
Я также пробовал:
performance['pct_change'] = performance['pct_change'].shift() * ( 1 + performance['perf'] )
, что дает:
perf pct_change
date
2018-05-31 NaN NaN
2018-06-01 0.012923 101.292251
2018-06-02 0.039364 NaN
2018-06-03 0.042805 NaN
2018-06-04 -0.033214 NaN
Но это только дает мне одно значение.
Я подозреваю, что уже есть гораздо более простой способ сделать то, что я пытаюсь сделать, но я просто не нахожу это.Любая помощь будет оценена.Это очень легко сделать в электронной таблице, но я хочу научиться делать это в Pandas.
Спасибо