首页 > 解决方案 > 计算 DataFrame 的总回报

问题描述

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

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

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

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

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

标签: pythonpandasdataframestock

解决方案


实际上有很多方法可以解决这个问题。但我确实建议您在学习更复杂的示例之前先通过基本示例来复习您的 Python 技能。

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

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

一种更 Pythonic 的方式是以矢量化形式进行,如下所示:

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

推荐阅读