问题描述
这是我在这里的第一篇文章,希望您能理解困扰我的事情。
因此,我有一个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])