检查节点是否共享DiGraph中的相互连接

时间:2018-11-04 17:22:29

标签: python pandas networkx

我正在使用网络数据,尝试使用熊猫数据框来描述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

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

1 个答案:

答案 0 :(得分:2)

您可以将Pandas和Nnumpy用于此类任务:

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