我有一个数据框架,里面有许多公司的年度价格和股息数据。我希望计算三年的年化回报率,将三年内收到的所有股息与期末股价相加,然后计算复合年增长率。我知道如何计算复合年增长率,但我陷入困境的地方是将当期收到的股息加在期末价格上。你知道吗
样本数据:
RIC Date Price Dividend
0 RSG.AX 2018 0.814 0.000
1 RSG.AX 2017 0.889 0.015
2 RSG.AX 2016 0.937 0.012
3 RSG.AX 2015 0.181 0.000
4 RSG.AX 2014 0.216 0.000
5 RSG.AX 2013 0.494 0.000
6 QBE.AX 2018 7.119 0.352
7 QBE.AX 2017 8.331 0.202
8 QBE.AX 2016 8.961 0.389
9 QBE.AX 2015 9.159 0.363
10 QBE.AX 2014 9.156 0.302
使用公司无线电收发机(RIC=公司代码),2015年至2018年的计算示例如下:
3-year return = (End price + cumulative dividends) / Start price = (0.814+0.015+0.012)/0.182 = 4.63
Annualized return = (return)^(1/years)-1 = (4.63)^(1/3)-1 = 0.66 = 66%
如何使用Python实现这一点?也许.groupby()
可以将每个公司的数据分开。感谢您的帮助!你知道吗
保持它的可读性-如果您真的想避免创建字典,可以使用
.apply
。你知道吗这是针对数据框架中的整个期间的—如果您希望最后三年更改为
grp.iloc[3]
(确保检查存在大量数据)。这还取决于这样一个事实,即您的数据与示例建议的datetime排序不变量是一致的。你知道吗使用^{} 从上面/下面的行中获取值进行计算
方法1:在RIC上使用循环
我使用每个RIC上的子数据帧的副本
df.RIC.unique()
循环它。假设年度价格为股息后价格,3-year return
将为:之后将sub_df更新为原始df。然后根据公式用^{} 计算
Annualized return
方法2-对自定义函数使用groupby()和apply()
基于方法1,我们可以定义一个自定义函数,通过
groupby
RIC应用仅供参考-结果看起来与您的示例有点不同,因为我发现您使用了
0.182
作为start price
,而根据您的示例数据,它应该是0.181
。你知道吗相关问题 更多 >
编程相关推荐