Python 从邻接列表创建邻接矩阵

Python 从邻接列表创建邻接矩阵,python,pandas,adjacency-matrix,adjacency-list,Python,Pandas,Adjacency Matrix,Adjacency List,我有两列的下一个DF A x A y A z B x B w C x C w C i 我想生成这样的邻接矩阵(计算交点) 我有下一个代码,但不起作用: 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

我有两列的下一个DF

A   x
A   y
A   z
B   x
B   w
C   x
C   w
C   i
我想生成这样的邻接矩阵(计算交点)

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

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列上进行自合并,然后进行交叉表:

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
>>> df
Drug_y  A  B  C
Drug_x
A       0  1  1
B       1  0  2
C       1  2  0

尝试在第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
>>> df
Drug_y  A  B  C
Drug_x
A       0  1  1
B       1  0  2
C       1  2  0
输入:

在交叉表前面的gene上合并,并用零填充对角线

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

col1_y  A  B  C
col1_x         
A       0  1  1
B       1  0  2
C       1  2  0
>>> df
Drug_y  A  B  C
Drug_x
A       0  1  1
B       1  0  2
C       1  2  0
输入:

在交叉表前面的gene上合并,并用零填充对角线

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

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

优雅,谢谢!优雅,谢谢!