преобразовать фрейм данных Pandas в матрицу смежности

У меня есть фреймворк Pandas (930 строк × 50 столбцов), который выглядит так:

index Keyword A Keyword B Keyword c
Page 1 1 3 1
Page 2 4 0 2
Page 3 0 1 1

Я хотел бы преобразовать его в матрицу смежности / взвешенный график, где каждое ключевое слово является узлом. Весом будет сумма комбинаций между каждым ключевым словом.

Результат будет примерно таким:

Keyword A Keyword B Keyword C
Keyword A 0 3 8
Keyword B 3 0 4
Keyword C 8 4 0

person Clemclem    schedule 10.01.2021    source источник
comment
Что в этом случае будет на выходе?   -  person ggaurav    schedule 10.01.2021
comment
Я обновил вопрос, чтобы вы могли увидеть ожидаемый результат.   -  person Clemclem    schedule 10.01.2021
comment
По каким правилам считать? Как получить число для Keyword B | Keyword A 3?   -  person mosc9575    schedule 10.01.2021
comment
Ключевое слово B: ключевое слово C должно быть 6, верно?   -  person ggaurav    schedule 10.01.2021
comment
A: C должно быть 9 = (1*1 + 4*2 + 0*1).   -  person orlp    schedule 10.01.2021


Ответы (1)


Решение обманчиво простое:

adj = df.T @ df
np.fill_diagonal(adj.values, 0)

E.g.:

>>> df = pd.DataFrame([[1, 1, 3, 1], [2, 4, 0, 2], [3, 0, 1, 1]],
                      columns=["index", "A", "B", "C"]).set_index("index")
>>> df
       A  B  C
index
1      1  3  1
2      4  0  2
3      0  1  1
>>> adj = df.T @ df
>>> np.fill_diagonal(adj.values, 0)
>>> adj
   A  B  C
A  0  3  9
B  3  0  4
C  9  4  0
person orlp    schedule 10.01.2021