1

一个 Dataframe 包含股票数据(dataframe 中的数据无关,省略):

      open   high   low   close
MSFT
APPL
IBM
GM
XP
INTC

问题:选择 3 只股票的组合,使得

  1. 顺序不重要:如果 MSFT/APPL/IBM 已计算,则 IBM/MSFT/APPL 是多余的
  2. 组合不能有重复:不能有 MSFT/MSFT/APPL

例如,如果一次只选择两只股票,则选择下面带有“X”的组合。这可以扩展到 3 个维度。

        MSFT   APPL   IBM   GM   XP   INTC
MSFT
APPL    X
IBM     X      X     
GM      X      X     X
XP      X      X     X      X 
INTC    X      X     X      X    X

我可以以非 Python 的方式(3 个嵌套循环)执行此操作,但我正在寻找更好的解决方案。

一个不将整个多维数据集保存在内存中的解决方案是必要的。数据集很大,只保留累积结果,而不是组合或其结果。

4

1 回答 1

1

您可以使用itertools.combination. 它非常有用,速度很快,并且可以满足您的两个要求。

from itertools import combinations

stocks = ['MSFT','APPL','IBM','GM','XP','INTC']
list(combinations(iterable=stocks, r=2))

然后按预期修改r参数(组合长度)。

于 2020-11-11T09:55:08.940 回答