【问题标题】:Calculating total returns from a DataFrame计算 DataFrame 的总回报
【发布时间】:2020-08-16 06:55:37
【问题描述】:

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

所以,我有一个 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 的第一个有效索引,并且它位于第一位。

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

【问题讨论】:

  • 能否提供数据框示例。
  • 请看这里以帮助您改进问题:stackoverflow.com/help/how-to-ask。我们几乎不可能以目前的形式回答您的问题。

标签: python pandas dataframe stock


【解决方案1】:

实际上,您可以通过多种方式解决此问题。但我确实建议您在学习更复杂的示例之前先通过基本示例来复习您的 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])

【讨论】:

  • 非常感谢,成功了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-12
  • 1970-01-01
  • 2013-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多