Python / Pandas - накопительная сумма с процентами - PullRequest
0 голосов
/ 10 октября 2018

Попытка сделать некоторые прогнозы в пандах.У меня есть график поступления ежемесячных платежей, и я хочу сделать кумулятивную сумму из общей суммы - это я могу сделать с .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 SMALL - скорость здесь очень важна.Может быть, откроет сырье для петлевых решений?

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Вот небольшая попытка:

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])
0 голосов
/ 10 октября 2018

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...