计算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的第一个有效索引,并且它位于第一个位置。

有人可以帮我吗?非常感谢

解决方法

实际上您可以通过多种方式进行此操作。但我确实建议您在开始更复杂的示例之前,先通过一些基本示例来熟悉python的技能。

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

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

更Python化的方式是将其向量化,例如:

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...