【问题标题】:Calculate a running return in pandas df计算 pandas df 中的运行回报
【发布时间】:2021-06-25 18:32:46
【问题描述】:

我有一个包含每日退货率的 df。我插入了一个列,开始时第一天的初始投资为 100 美元。我正在尝试计算每天的运行回报,如下所示

import pandas as pd

d = {'day': [1, 2, 3], 'return': [1.00, 1.04, 1.02], 'init_invest': [100, 0, 0]}
df = pd.DataFrame(data=d)

我们将新列称为“值” 在这个例子中,我想看看

Day 1 value = 100 x 1.00 = 100
Day 2 value = 100 x 1.04 = 104
Day 3 value = 104 x 1.02 = 106.08

一开始我以为我需要在这里使用 shift,但没有成功。我怎样才能创建这个新的计算乘率*前一行的值?

【问题讨论】:

    标签: python pandas rolling-computation


    【解决方案1】:

    对于你的情况,因为你知道所有的回报,你可以直接用它来计算。

    Day 1 value is given.
    Day 2 value = day 1 value * 1.04 = 104
    Day 3 value = day 1 value * 1.04 * 1.02 = 106.08
    
    
    df["init_invest"] = df["return"].cumprod() * df["init_invest"].iloc[0]
    
       day  return  init_invest
    0    1    1.00       100.00
    1    2    1.04       104.00
    2    3    1.02       106.08
    ``
    

    【讨论】:

    • 不确定我是否关注这里。你能解释一下你在做什么吗?我认为 init_invest 设置有错别字,但在您的输出中没有这样显示
    • @brooks08 我刚刚修正了列名中的错字。想法是,n 当天的总回报可以计算为:100 * (return_day2) * (return_day3) * ... * (return_dayn),这意味着只要您可以计算当天的回报百分比,您就可以将其乘以您的初始投资价值case 是init_invest 列中的第一个值。因此,您不需要 init_invest 列中的中间值来计算第二天的值。
    猜你喜欢
    • 2019-08-10
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 2020-11-03
    • 1970-01-01
    • 2019-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多