乘以列的所有组合

时间:2019-03-19 16:59:49

标签: python python-3.x pandas numpy

我正在尝试找到一种有效的方法来将熊猫数据框中的每个列组合相乘。我设法通过itertools实现了这一点,但是,当数据框的大小增加时,它的速度会大大降低。我将需要在大小约为(100,1000)的数据帧上执行此操作

下面具有较小数据框的工作代码示例,

import numpy as np
import pandas as pd
from itertools import combinations_with_replacement

df = pd.DataFrame(np.random.randn(3, 10))
new_df = pd.DataFrame()

for p in combinations_with_replacement(df.columns,2):
        title = p
        new_df[title] = df[p[0]]*df[p[1]]  

有人对如何实现这一目标有任何建议吗?

1 个答案:

答案 0 :(得分:0)

结合索引视图和array.prod(axis),运行速度提高了约100倍:

def f1():
    #with loop
    new_df = pd.DataFrame()
    for p in combinations_with_replacement(df.columns,2):
            title = p
            new_df[title] = df[p[0]]*df[p[1]]
    return new_df

def f2():
    n = len(df.columns)
    ix = np.indices((n,n))[:, ~np.tri(n, k=-1, dtype=bool)]
    return pd.DataFrame(df.values.T[ix.T].prod(1).T, columns=list(map(tuple, ix.T)))