【问题标题】:Advanced weight calculation with large dataset in Python在 Python 中使用大型数据集进行高级权重计算
【发布时间】:2021-03-24 10:55:29
【问题描述】:

我要计算每月重新平衡的投资组合的权重。在粘贴的数据集中,PERMNO 是一只股票,我需要计算这个投资组合的累积权重,即权重随着股票收益的增加而增加。

案例是: 每天的权重计算如下:每只股票的 w1 = w0*(1+r0)/(sum(all w1 that day))。在excel中这没问题,但是我在python中遇到了问题。因为第二天的 w0 是过去一天的 w1。我尽量不使用循环,因为日期集很大,但任何解决方案都值得赞赏。 我正在处理的数据框是这样的:

这就是我希望的计算方式:

正如您在第二张图片中看到的,第 2 天的体重是第 1 天的新体重。这就是问题所在。

谢谢!!

【问题讨论】:

  • 这很有趣,因为基本上你要做的是将初始权重乘以返回的累积乘积,这会在没有缓存中间体的情况下在多余的计算中迅速爆发。 w_i = w0_i * itertools.accumulate(df.return_factors_i, operator.mul) / sum_i(w0_i * itertools.accumulate(df.return_factors_i, operator.mul)。可能想查看functools.cache 的电话。我知道可以创建一组协同工作的函数来模拟所需的行为,但是在循环中创建它实际上有什么问题?
  • 现在我也尝试用循环解决它,但遇到了某些问题。你有循环解决方案吗?

标签: python finance stock


【解决方案1】:

您将避免数据循环称为主要问题。在这种情况下,我想让您知道,您可以逐行读取整个文件,然后随意使用数据,而无需遍历数据。

逐行浏览您的文件并使用带有相应分隔符的.split() 方法来拆分列。保存行的数据,即附加到list 或将它们添加到dictionary。然后,将修改后的行写入文件。

为了提高 RAM 效率,您可以单独处理所有日期(每当出现新数据时),前提是您的文件按日期排序。

【讨论】:

  • 如果您有一个带有循环的解决方案,我们也将不胜感激。我被困在这里了。
  • 所以你的问题是如何计算“w1 = w0*(1+r0)/(sum(all w1 that day))”值?您可以计算临时解决方案,忽略分母,稍后再除。无需以递归方式计算实际的分子和分母,因为结果永远不会改变。除非我误解了变量。
  • 是的!实际上它是 Wt = Wt-1(1+Rt-1)/当天所有 wt 的总和,其中 t-1 是昨天的值那么你是什么意思临时解决方案?这就是我想要实现但无法管理的目标
猜你喜欢
  • 1970-01-01
  • 2019-05-24
  • 1970-01-01
  • 1970-01-01
  • 2017-04-06
  • 1970-01-01
  • 2017-02-03
  • 1970-01-01
  • 2019-03-24
相关资源
最近更新 更多