如何检查数据框中每个单元格的条件

How to check on a condition for each cell in a dataframe

我正在尝试从由 1300 个药物分子组成的 Dataframe 制作网络图,目标分子为字符串和 31 个 int/float 类型的分子描述符。我将节点设置为与数据帧的索引相同。下面是一个数据框示例,并给出了初始代码:

import networkx as nx
import pandas as pd
import numpy as np

df_data = pd.read_csv("QSAR_2.csv")
df_targets = df_data["Target"]
df_descriptors = df_data.iloc[:,2:-1]

G = nx.Graph()
G.add_nodes_from(df_descriptors.index.values.tolist())

现在我需要在相关性高于阈值 c 的节点之间添加边。获取相关矩阵很容易:

df_corr = df_descriptors.T.corr()

但现在我需要检查条件:correlation > c if so 获取单元格的 (x,y) 并将其作为元组添加到 G.add_edge(x, y)

我可以使用嵌套循环来完成这项工作,但我想有一种更简单、更快速的实现方法。有人知道解决办法吗?

从相关矩阵 cc_matrix 中,您可以使用 edge_list=np.argwhere(cc_matrix>c) 简单地提取相关性高于阈值 c 的边的索引。然后,您可以使用 G.add_edges_from(edge_list).

将这些边添加到图表中

请参阅下面的完整示例:

import networkx as nx
import numpy as np

#Create random correlation matrix
a=np.random.choice(10,size=(10,10))
cc_matrix=np.corrcoef(a)

#Create graph
G=nx.Graph()
c=0.5
edge_list=np.argwhere(cc_matrix>c) 
G.add_edges_from(edge_list)