Python/Pandas-带利息的累计金额

Python/Pandas-带利息的累计金额,python,pandas,numpy,Python,Pandas,Numpy,试图对大熊猫做一些预测。我有一个每月付款的收入计划,我想做一个总收入的累计-我可以用.cumsum()来做这件事但是我想增加5%的pa利息/增长因素。 示例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

试图对大熊猫做一些预测。我有一个每月付款的收入计划,我想做一个总收入的累计-我可以用
.cumsum()
来做这件事但是我想增加5%的pa利息/增长因素。

示例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很小-速度在这里是非常次要的问题。也许会为循环解决方案打开raw

假设增长恒定:

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
下面是一个快速尝试:

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])

2018-08年度的cumsum不应该是3k吗?另外,它是prev*(1+增长)而不是prev*增长,不是吗?是的,从技术上讲是正确的,但我假设我们添加了1,答案对你有用吗?