数据框行与其自身的有效组合

Efficient combination of dataframe rows with itself

我有一个 python 数据框“a,b,c,d,...z”。 我想获得所有可能的组合:“aa、ab、ac、ad、.. az”然后是“ba、bb、bc、bd、... bz”等等。

我所做的是一个简单的嵌套 for

for index, d1 in d.iterrows():
    for index2, d2 in d.iterrows():
        #do stuff

上面的代码工作正常。但是,数据框非常大(50000 行),我正在努力提高效率(现在我显然不是)。 在这些 for 循环中,我还得到了组合“ab”和“ba”,这与我正在做的事情是一样的。比方说,在

ab, ac, ad, ba, bc, bd, ca, cb, cd, da, db, dc

组合

ab-ba, ac-ca, ad-da, bc-cb, bd-db, cd-dc

相同。

所以,由于上述原因:

第一:我想只在上半场之间进行迭代。这意味着现在正在发生的是每 50000 行与另外 50000 行的组合。为了减少一些计算,我将前 25000 行与 table 的所有 50000 行合并。仍然没有避免任何不必要的组合,但是,这是否有意义并且仍然 return 每个组合在更短的时间内?有没有我可以研究的已经实现的算法?

第二:我尝试实现多处理(我确实有一个很好的 multicore/thread 处理器),因为组合中没有任何东西依赖于先前的计算,在我看来,我认为这是增加的好方法表现。但是我这样做没有成功。你有什么建议? Library/method?

我还能做些什么来提高效率和性能?

(出于好奇,我有一个项目要制作一些独特的字母短语,这意味着我将 运行 上述算法多次,我将需要我能获得的所有性能)

我认为您正在寻找的是来自 itertoolscombinations,标准库中的一个包。

from itertools import combinations

for d1, d2 in combinations(df['column name'], 2):
    # do stuff