我正在使用网络数据,尝试使用熊猫数据框来描述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
我可以使用什么来更快地完成此任务?
答案 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