Создать матрицу смежности из массива и ее транспонировать - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть пандас DataFrame, подобный этому:
enter image description here

И я хотел бы создать симметричную матрицу, подобную этой:
enter image description here

Где значение - это длина пересечения двух списков.Поэтому я сделал эту функцию:

 def intersectSize(l1, l2):
     return len(set(l1) & set(l2))

Существует ли функция, похожая на эту:

def createSymMatrix(array, func):
    ...
    return matrix

, где array - мой начальный кадр данных, а func - этоintersectSize функция?

РЕДАКТИРОВАТЬ: понял с этим двумя вкладышем:

array = [[len(set(l1)&set(l2)) for l1 in df]] for l2 in df]
adj = pd.DataFrame(data=array, index=df.index, columns=df.index)

1 Ответ

0 голосов
/ 27 ноября 2018

Я думаю, вам это нужно,

r=[]
for val in list(itertools.product(df[0].values,df[0].values)):
    r.append( len(set(val[0])&set(val[1])) )
print pd.DataFrame(np.array(r).reshape(len(df),-1))

Использование списка понимания:

t= [len(set(val[0])&set(val[1])) for val in list(itertools.product(df[0].values,df[0].values))]
print pd.DataFrame(np.array(t).reshape(len(df),-1))

Вывод:

   0  1  2  3
0  3  0  0  1
1  0  1  0  1
2  0  0  2  0
3  1  1  0  2
...