从邻接表创建邻接矩阵

时间:2021-04-14 19:41:23

标签: python pandas adjacency-matrix adjacency-list

我有下一个有两列的 DF

A   x
A   y
A   z
B   x
B   w
C   x
C   w
C   i

我想生成这样的邻接矩阵(计算交集)

    A   B   C
A   0   1   2
B   1   0   2
C   2   2   0

我有下一个代码但不起作用:

import pandas as pd

df = pd.read_csv('lista.csv')
drugs = pd.read_csv('drugs.csv')
drugs = drugs['Drug'].tolist()
df = pd.crosstab(df.Drug, df.Gene)
df = df.reindex(index=drugs, columns=drugs)

如何获得邻接矩阵?

谢谢

2 个答案:

答案 0 :(得分:2)

尝试在第 2 列上进行自我合并,然后进行交叉表:

s = df.merge(df,on='col2').query('col1_x != col1_y')
pd.crosstab(s['col1_x'], s['col1_y'])

输出:

col1_y  A  B  C
col1_x         
A       0  1  1
B       1  0  2
C       1  2  0

答案 1 :(得分:0)

输入:

>>> drugs
  Drug Gene
0    A    x
1    A    y
2    A    z
3    B    x
4    B    w
5    C    x
6    C    w
7    C    i

crosstab 之前的基因上合并并用零填充对角线

df = pd.merge(drugs, drugs, on="Gene")
df = pd.crosstab(df["Drug_x"], df["Drug_y"])
np.fill_diagonal(df.values, 0)

输出:

>>> df
Drug_y  A  B  C
Drug_x
A       0  1  1
B       1  0  2
C       1  2  0