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

2024-10-06 07:17:41 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我的问题有两个:

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

  2. 我不太确定如何将这100种蛋白质的名称(即uL32等)与这个矩阵的行和列“绑定”,这样当我开始移动名称周围的行时,名称就会相应地移动。(我计划将邻接矩阵重新设置为块对角结构)

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

我确信这是人们每天都在执行的操作,我只是不太熟悉数据帧如何正常工作,所以我可能在寻找一些非常明显的东西。 非常感谢你


Tags: 数据方法名称pandas矩阵蛋白质ul5ul22
1条回答
网友
1楼 · 发布于 2024-10-06 07:17:41

我不完全理解你的问题,但从我得到的信息来看,请尝试一下这段代码

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

相关问题 更多 >