从 DataFrame 计算总数 returns

Calculating total returns from a DataFrame

这是我第一次post来这里,希望您能理解我的困扰。

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

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

比如一只股票的最后价格是16美元左右,而我的第一个数据是1.5美元,这将超过10倍return,但我的结果只有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]

更 pythonic 的方法是以向量化的形式进行,如下所示:

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