如何检查数据框中每个单元格的条件
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)
我正在尝试从由 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)