计算DataFrame的总回报



这是我在这里的第一篇文章,我希望你能理解困扰我的是什么。

因此,我有一个DataFrame,从2010年开始,每天包含大约1200家公司的价格。现在我想计算每一个的总回报。我的DataFrame按日期编制索引。我可以用df.iloc[-1]/df.iloc[0]方法,但有些公司在晚些时候开始公开交易,所以我无法得到这些公司的结果,因为它们是用NaN值除以的。我尝试创建一个列表,其中包含每只股票(列(的第一个有效索引,然后当我尝试计算总回报时,我得到了错误的结果!我尝试了一个经典的循环:

for l in list:
returns = df.iloc[-1]/df.iloc[l]

例如,一只股票的最后价格是16美元左右,我的第一个数据是1.5美元,这将是回报率的10倍多,但我的结果只有1.1美元左右!我还想补充一点,前面提到的列表也包括Date的第一个有效索引,它位于第一个位置。

有人能帮帮我吗?非常感谢

实际上有很多方法可以实现这一点。但我建议你在进入更复杂的例子之前,先用基本的例子来复习你的python技能。

如果你想按自己的方式做,你可以这样做:

returns = {}
for stock_name in df.columns:
returns[stock_name] = df[stock_name].dropna().iloc[-1] / df[stock_name].dropna().iloc[0]

一种更像蟒蛇的方式是以矢量化的形式进行,比如:

returns = ((1 + data.ffill().pct_change())
.cumprod()
.iloc[-1])

最新更新