我正在使用网络数据,尝试使用熊猫数据框来描述networkx DiGraph。我想要图表中每对的行和一列,该列指示是否同时存在边(node1,node2)(node2,node1) -在图中有相互连接。

我可以为一个小图实现以下功能,但是它太慢而无法用于大图。

edges = pd.DataFrame({'source': [0, 2, 2,5],
                  'target': [2, 0, 3,0])
UnD_Test = nx.from_pandas_edgelist(edges)
Test = nx.from_pandas_edgelist(edges, create_using=nx.DiGraph())

link_df = pd.DataFrame(list(UnD_Test.edges))
link_df['Mutual'] = False

for val in range(len(link_df['Mutual'])):
    p1 = link_df.iloc[val][0]
    p2 = link_df.iloc[val][1]
    if ((p1,p2) in Test.edges()) & ((p2,p1) in Test.edges()):
         link_df['Mutual'][val] = True


我可以用什么来更快地完成此任务?

最佳答案

您可以将Pandas和Numpy用于以下任务:

x = pd.DataFrame(list(Test.edges()), columns=['a','b'])

res = pd.DataFrame(
        np.unique(np.sort(x.merge(x.rename(columns={'a':'b', 'b':'a'})),
                          axis=1),
                  axis=0),
        columns=['a','b'])

结果:
In [73]: res
Out[73]:
   a  b
0  0  2

关于python - 检查节点是否共享DiGraph中的相互连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53143418/

10-11 10:45