Python / Pandas - накопительная сумма с процентами

1

Попытка сделать некоторое прогнозирование в пандах. У меня есть график поступлений ежемесячных платежей, и я хочу сделать кумулятивную сумму из общей суммы - это я могу сделать с помощью .cumsum(). Однако я хотел бы добавить 5% -ный процентный/коэффициент роста.

Пример df:

Month   Payment
2018-01  1000
2018-02  2000
2018-03   500
2018-04  1000
2018-05     0
2018-06     0

Я хотел бы вывести:

Month   Payment CumSum with Growth
2018-01  1000    1000
2018-02  2000    3005 (previous cumsum) * growth + 2000
2018-03   500    3510 (previous cumsum) * growth + 500
2018-04  1000    4510 (previous cumsum) * growth + 1000
2018-05     0    4515
2018-06     0    4520
  • Счастлив сделать это за пределами панд и при необходимости вернуть обратно.
  • Df МАЛЕНЬКАЯ - здесь очень важна скорость. Возможно, открываются исходные решения?
  • 0
    не должно cumsum на 2018-08 3k? также это предыдущий * (1+ рост) не предыдущий * рост, нет?
  • 0
    Да для № 1 - и № 2 технически верно, но я предполагал, что мы уже добавили 1
Показать ещё 1 комментарий
Теги:
pandas
numpy

2 ответа

0

Здесь быстро попробуйте:

def interest(data, rate):
    #turn yearly to monthly rate
    monthly = rate/12.0
    #hole output
    out = np.zeros_like(data, dtype = float)
    #initial deposit
    out[0] = data[0]
    for i in range(1, len(data)):
        #t+1 = t*(1+monthly) + deposit
        out[i] = out[i - 1]*(1+monthly)+ data[i]
    return out

Он должен работать как ожидалось:

x = pd.DataFrame({'amount':[1000,2000,500, 1000,0,0]})
interest(x.amount, 0.05)

array([1000.        , 3004.16666667, 3516.68402778, 4531.33687789,
       4550.21744822, 4569.17668759])
-2

при условии постоянной роста:

growth = 0.05/12
df['aux'] = df['Payment']*(1+growth)
df.loc[0,'aux'] = df.loc[0,'Payment']
df['cumsum'] = df['aux'].cumsum()
df = df.drop('aux', axis = 1)

Выход

    Month  Payment       cumsum
0  2018-01     1000  1000.000000
1  2018-02     2000  3008.333333
2  2018-03      500  3510.416667
3  2018-04     1000  4514.583333
4  2018-05        0  4514.583333
5  2018-06        0  4514.583333

Ещё вопросы

Сообщество Overcoder
Наверх
Меню