将Pandas数据框转换为邻接矩阵。

5
我有一个 Pandas 数据帧 (930行 × 50列),长这样: ```
index 关键词A 关键词B 关键词C
Page 1 1 3 1
Page 2 4 0 2
Page 3 0 1 1
```
我想将其转换成邻接矩阵 / 带权图,其中每个关键词都是一个节点。权重将是每个关键词之间的组合总和。
结果应该类似于这样: ```
关键词A 关键词B 关键词C
关键词A 0 3 8
关键词B 3 0 4
关键词C 8 4 0
```

在这种情况下的输出是什么? - ggaurav
我更新了问题,以便您可以看到预期的输出。 - Clemclem
什么是计数规则?如何得到“关键词B | 关键词A”为3的数字? - mosc9575
关键字 B:关键字 C 应该是 6,对吗? - ggaurav
A:C 应该是 9 = (1*1 + 4*2 + 0*1) - orlp
1个回答

4
这个解决方案看似简单:
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接