简体   繁体   English

从邻接表创建邻接矩阵

[英]Create adjacency matrix from adjacency list

I have the next DF with two columns我有下一个包含两列的 DF

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

I want to produce an adjacency matrix like this (count the intersection)我想产生一个这样的邻接矩阵(计算交叉点)

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

I have the next code but doesnt work:我有下一个代码但不起作用:

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)

How can i obtain the adjacency matrix?我怎样才能获得邻接矩阵?

Thanks谢谢

Try self merge on column 2 and then crosstab:尝试在第 2 列上进行自我合并,然后进行交叉表:

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

Output: Output:

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

Input:输入:

>>> 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

Merge on gene before crosstab and fill diagonal with zeroscrosstab之前合并基因并用零填充对角线

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

Output: Output:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM