【问题标题】:How to calculate future value of investment with Pandas when interest rates and payments vary over time?当利率和付款随时间变化时,如何使用 Pandas 计算投资的未来价值?
【发布时间】:2020-02-29 19:53:30
【问题描述】:

假设我想知道我所投资资金的价值如何随时间变化。我在 Pandas DataFrame 中有以下数据:

            contribution    monthly_return
2020-01-01  91.91           np.Nan
2020-02-01  102.18          0.037026
2020-03-01  95.90          -0.012792
2020-04-01  117.89         -0.009188    
2020-05-01  100.44          0.011203
2020-06-01  98.89           0.053917
2020-07-01  106.10         -0.049397
2020-08-01  112.55          0.062375
2020-09-01  103.16         -0.063198

...等等。每个月我都会向我的“基金”(贡献)投入额外的资金。月报表显示我的钱在上个月的价值如何变化。

我想添加额外的列,我可以在其中找到有关我每个月投资的当前价值的信息(以便我可以将其绘制在图表上)。据我所知,我不能使用任何 numpy 财务函数(例如 np.fv()),因为贡献和费率会随着时间而变化。我可以累计缴款,但我不知道如何添加投资损益。

这可能是一个微不足道的问题,但我完全陷入困境,我在这个问题上浪费的时间比我承认的要多。任何帮助将不胜感激!

【问题讨论】:

  • 您对2020-01-01 的投资是91.91。同一天monthly_return-0.038305对应什么时间段? 2019 年 12 月?你的意思是在2020-01-01 之前你的账户里有一些钱吗? monthly_return、$、%的单位是什么?
  • 假设我们从 0 美元的投资开始。每个月我都会捐出指定数量的钱。上面提到的例子只是我从我的数据中提取的一个样本——我犯了一个错误,第一个月不应该有任何月度回报。每下一个monthly_return 对应于当月与上月之间的差异。每月回报的单位是 %。我希望我消除了任何疑虑!
  • 月回报单位,%?每月、每年、简单、复合?
  • 编辑了我之前的评论。每月简单的回报。

标签: python pandas dataframe finance quantitative-finance


【解决方案1】:

假设你有一个df:

print(df)
            contribution  monthly_return
2020-01-01         91.91             NaN
2020-02-01        102.18        0.037026
2020-03-01         95.90       -0.012792
2020-04-01        117.89       -0.009188
2020-05-01        100.44        0.011203
2020-06-01         98.89        0.053917
2020-07-01        106.10       -0.049397
2020-08-01        112.55        0.062375
2020-09-01        103.16       -0.063198

然后让我们找出你的钱每月增长的乘数:

df['monthly_multiplier'] = 1 + df['monthly_return'].shift(-1)
print(df)
            contribution  monthly_return  monthly_multiplier
2020-01-01         91.91             NaN            1.037026
2020-02-01        102.18        0.037026            0.987208
2020-03-01         95.90       -0.012792            0.990812
2020-04-01        117.89       -0.009188            1.011203
2020-05-01        100.44        0.011203            1.053917
2020-06-01         98.89        0.053917            0.950603
2020-07-01        106.10       -0.049397            1.062375
2020-08-01        112.55        0.062375            0.936802
2020-09-01        103.16       -0.063198                 NaN

最后我们可以遍历行,看看你的财富是如何增长的:

df['fv'] = 0
fv = 0
for index, row in df.iterrows():
    fv = (fv+row['contribution'])*row['monthly_multiplier']
    df.loc[index,'fv']=fv
print(df)
            contribution  monthly_return  monthly_multiplier          fv
2020-01-01         91.91             NaN            1.037026   95.313060
2020-02-01        102.18        0.037026            0.987208  194.966728
2020-03-01         95.90       -0.012792            0.990812  288.194245
2020-04-01        117.89       -0.009188            1.011203  410.633607
2020-05-01        100.44        0.011203            1.053917  538.629162
2020-06-01         98.89        0.053917            0.950603  606.027628
2020-07-01        106.10       -0.049397            1.062375  756.546589
2020-08-01        112.55        0.062375            0.936802  814.171423
2020-09-01        103.16       -0.063198                 NaN         NaN

df['fv'] 是您在指定月末或下一次捐款之前的财富。

【讨论】:

  • 非常感谢您的回答!不幸的是,在我看来,您提出的解决方案是相当错误的。在您的示例中,只有当前贡献乘以每月的回报率。每个monthly_return 也应该影响前几个月贡献的所有资金。将其视为投资基金。每个月我都会贡献一些额外的现金,但价值的变化适用于基金中收集的所有资金,而不仅仅是我目前的贡献。
  • 根据您的评论更正。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-09
相关资源
最近更新 更多