熊猫组合/矩阵运算

时间:2020-02-03 19:40:10

标签: python pandas performance matrix combinations

我有一个数据框A,它是一个简单的零件元素数据库:

    A = pd.DataFrame(columns= ['name','attribute1','attribute2']...)

示例:

    A = pd.DataFrame([('X', 1, 0.5),('Y', 0.5, 0.8),('Z', 0.4,0.1)])

下面的列表“索引”是长度为3的A中名称的所有可能组合的列表: 例如ABC,ACD,ARG等。

    index = list((i,j,k) for ((i,_),(j,_),(k,_)) in itertools.combinations(enumerate(A['name']),3))

我在这里使用枚举是为了让我可以参考稍后生成的任何特定组合。

为了能够将组合放在一起,我有一个权重排列的列表,这些权重代表要应用于A中每个属性的所有可能的权重:

    weights = list(itertools.permutations([-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10],3))

这会生成诸如[(1,2,3),(-2,4,1)..]等的权重

我需要一个与A具有相同结构的结果矩阵/数据框,其名称表示A的名称的组合,即。结果中的ABC和属性是权重与A中属性的线性组合,即。

     A.dot(weight) 

我尝试遍历写入各行,但是计算时间太长,例如下面的代码将无法工作:

    for x in weights:
            part1 = x[0]
            part2 = x[1]    
            part3 = x[2]
            q = 0

            while q < len(results):

                ind1 = results['index'][q][0]
                ind2 = results['index'][q][1]
                ind3 = results['index'][q][2]


                results['name'][q] = ''.join((str(A['name'][ind1]),str(a['name'][ind2]),str(A['name'][ind3])))
                results['attrib1'][q] = part1 * A['attrib1'][ind1]+part2*A['attrib1'][ind2] + part3*A['attrib1'][ind3]
                results['attrib2'][q] = part1 * A['attrib2'][ind1]+part2*A['attrib2'][ind2] + part3*A['attrib2'][ind3]       

所需结果示例:

    Result = pd.DataFrame([('XYZ', -0.1, 0.5),('VTS', 0.5, 0.8),('AGT', 0.4,0.1)])

其中数字列中的值是元素的线性组合,使用上面权重列表中的一组特定权重。

有什么想法吗?

0 个答案:

没有答案