Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 投资组合收益率_Python_Pandas_Finance - Fatal编程技术网

Python 投资组合收益率

Python 投资组合收益率,python,pandas,finance,Python,Pandas,Finance,我有一个包含市场数据的数据框和一个专门用于每日回报的专栏。 我很难创建一个价值100000.00美元的投资组合,并在数据系列的整个生命周期内计算其累积回报 理想情况下,我希望使用pandas计算“portfolio”列,但这样做有困难。见下面的目标输出。多谢各位 index date index return portfolio 0 19900101 2000 Nan 100000.00 1 19900102 2002 0.00

我有一个包含市场数据的数据框和一个专门用于每日回报的专栏。 我很难创建一个价值100000.00美元的投资组合,并在数据系列的整个生命周期内计算其累积回报

理想情况下,我希望使用pandas计算“portfolio”列,但这样做有困难。见下面的目标输出。多谢各位

index    date      index  return  portfolio
0        19900101  2000   Nan     100000.00
1        19900102  2002   0.001   100100.00
2        19900103  2020   0.00899 100999.90 
3        19900104  2001  -0.00941 100049.49
使用cumprod

一些调整:

df=df.replace('Nan',np.nan)
df['return']=pd.to_numeric(df['return'])
使用cumprod

一些调整:

df=df.replace('Nan',np.nan)
df['return']=pd.to_numeric(df['return'])
为了可视化正在发生的情况,cumprod正在计算复合回报,例如cum_r3=1+r1*1+r2*1+r3

为了可视化正在发生的情况,cumprod正在计算复合回报,例如cum_r3=1+r1*1+r2*1+r3


你不应该简单地对返回列求和吗?@WillemVanOnsem你不能假设简单返回而不是log来对返回进行求和,它们需要复合。你不应该简单地对返回列求和吗?@WillemVanOnsem你不能假设简单返回而不是log来对返回进行求和,它们需要复合。有没有一个好的资源来想象这个公式中发生了什么?具体地说,由于某种原因,将起始值相乘会导致看到累积值在整个过程中相乘的心理障碍。。与这个常数相反。。。泰@antonio_zeus你提到了回报率,回报率是以前值的百分比变化,而不是初始值。有没有好的资源来可视化这个公式中发生了什么?具体地说,由于某种原因,将起始值相乘会导致看到累积值在整个过程中相乘的心理障碍。。与这个常数相反。。。泰@antonio_zeus您提到的回报率,回报率是从以前的值变化的百分比,而不是初始值
starting_value = 100000
df = df.assign(portfolio=(1 + df['return'].fillna(0)).cumprod().mul(starting_value))
>>> df
   index      date  index.1   return     portfolio
0      0  19900101     2000      NaN  100000.00000
1      1  19900102     2002  0.00100  100100.00000
2      2  19900103     2020  0.00899  100999.89900
3      3  19900104     2001 -0.00941  100049.48995
>>> (1 + df['return'].fillna(0)).cumprod()
0    1.000000
1    1.001000
2    1.009999
3    1.000495
Name: return, dtype: float64