Проверьте, разделяют ли узлы взаимную связь в DiGraph - PullRequest
0 голосов
/ 04 ноября 2018

Я работаю с сетевыми данными, пытаюсь использовать pandas dataframe для описания сети x 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 голосов
/ 05 ноября 2018

Вы можете использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...