очень сложная комбинаторика и проблема панды в python - PullRequest
0 голосов
/ 03 февраля 2020

Очень сложная проблема для вас, пандусов. В настоящее время у меня есть матрица A, представляющая собой простую базу данных:

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

В приведенном ниже списке указываются все комбинации имен в A длиной 3: например, AB C, ACD, ARG и др. * 1020. * ..

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

Я перечисляю здесь, чтобы я мог вернуться к любому заданному c комбо, сгенерированному позже.

Теперь у меня есть другой список весов перестановок, представляющий веса, которые будут применены к каждое имя в 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) ..] et c

Мне нужно матрица результатов / фрейм данных, который находится в той же структуре, что и A, с именами, представляющими комбинацию имен A, ie. AB C и атрибуты в результатах являются линейными комбинациями весов с атрибутами в A ie.

     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]       
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...