繁体   English   中英

Python /熊猫-感兴趣的累计总和

[英]Python/Pandas - Cumulative Sum with Interest

试图对熊猫做一些预测。 我有一个按月支付的收入时间表,想做一个总数的累计和,我可以很轻松地用.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很小-速度是这里的第二要务。 打开原始的for loop解决方案?

快速尝试:

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

假设增长常数:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM