python - 计算 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]
一种更 Pythonic 的方式是以矢量化形式进行,如下所示:
returns = ((1 + data.ffill().pct_change())
.cumprod()
.iloc[-1])
推荐阅读
- reactjs - Enzyme 模拟子组件的 onChange 事件
- python - 如何在 discord.py cogs 中创建别名?
- python - Deeplab 新数据集未找到新类
- c# - CLR 应用程序未启动
- python - 无法在python中修改文本+函数问题
- django - 按当前登录的用户过滤模型选择字段
- java - @NotNull 整数参数
- github - 如何将多个问题分配给 github 中的项目
- python - Python运行程序时出现ModuleNotFoundError,但是在python环境下可以导入模块
- matlab - 在 MATLAB 中存储和访问大量数据