如何在 pandas 中创建邻接矩阵,以便在重新排列行和列时保留标签

How to create an adjacency matrix in pandas such that the labels are preserved when rows and cols are rearranged

我以前从未为此目的使用过 pandas 或 numpy,我想知道 在 pandas 中构造标记邻接矩阵的惯用方法是什么。

我的数据与此类似。每种 "uL22" 类型的东西都是一种蛋白质,数组是这种蛋白质的邻居。因此(在下面的这个例子中)邻接矩阵将在 bL31 行、uL5 列中有 1,反之亦然

我的问题是双重的:

  1. 邻接矩阵的实际维度由一组蛋白质名称决定,通常比 nbrtree 中包含的蛋白质名称大得多,所以我想知道什么是最好的将我的 nbrtree 数据映射到该集合的方法,比如 100 by 100 矩阵对应于 100 蛋白质的邻域关系。

  2. 我不太确定如何将这 100 种蛋白质的名称(即 uL32 等)"bind" 到该矩阵的行和列中,这样当我开始相应地移动名称周围的行。 (我打算将邻接矩阵重新排列成块对角线结构)

"nbrtree": {
        "bL31": ["uL5"],
        "uL5": ["bL31"],
        "bL32": ["uL22"],
        "uL22": ["bL32","bL17"],
         ...
        "bL33": ["bL35"],
        "bL35": ["bL33","uL15"],
        "uL13": ["bL20"],
        "bL20": ["uL13","bL21"]
}
>>>len(nbrtree)
>>>40

我确定这是人们每天都在进行的操作,我只是不太熟悉数据帧的正常运行方式,所以我可能正在寻找一些非常明显的东西。 非常感谢!

我不完全理解你的问题,但从我得到的尝试这段代码。

from pprint import pprint as pp
import pandas as pd
dic = {"first": {
        "a": ["b","d"],
        "b": ["a","h"],
        "c": ["d"],
        "d": ["c","g"],
        "e": ["f"],
        "f": ["e","d"],
        "g": ["h","a"],
        "h": ["g","b"]
}}
col = list(dic['first'].keys())
data = pd.DataFrame(0, index = col, columns = col, dtype = int)
for x,y in dic['first'].items():
        data.loc[x,y] = 1
pp(data)

这段代码的输出是

   a  b  c  d  e  f  g  h
a  0  1  0  1  0  0  0  0
b  1  0  0  0  0  0  0  1
c  0  0  0  1  0  0  0  0
d  0  0  1  0  0  0  1  0
e  0  0  0  0  0  1  0  0
f  0  0  0  1  1  0  0  0
g  1  0  0  0  0  0  0  1
h  0  1  0  0  0  0  1  0

注意这里的邻接矩阵不对称因为我已经获取了一些随机数据

要将您的标签吸收到数据框中,请更改为以下内容

data = pd.DataFrame(0, index = ['index']+col, columns = ['column']+col, dtype = int)
data.loc['index'] = [0]+col
data.loc[:, 'column'] = ['*']+col