通过groupby / itertools添加边缘属性

时间:2018-11-27 10:45:15

标签: networkx pandas-groupby itertools edges

我有一些与出版物ID相关的作者数据。以下脚本使用这些共同发布来基于共同作者创建边缘列表:

import networkx as nx
import itertools
D = nx.Graph()
D.add_nodes_from(author_affiliations_dataframe['auid'].values)
for i, group in author_affiliations_dataframe.groupby(['pmid'])['auid']:
   # generate all combinations without replacement 
   # from the group of similar column pairs
   for u, v in itertools.combinations(group, 2):           
       D.add_edge(u, v)

但是,由于我对这些网络随着时间的发展感兴趣,所以我现在想将出版年份添加到各个方面。出版年份链接到出版物ID,也可以在author_affiliations_dataframe中找到。

1 个答案:

答案 0 :(得分:0)

我找到了部分解决方案:

for i, group in author_pmids.groupby(['pmid'])['auid']:
# generate all combinations without replacement 
# from the group of similar column pairs
    for u, v in itertools.combinations(group, 2): 
         edges.append(pd.DataFrame({'pmid': [i], 'left': [u],'right':[v]}))          
edges = pd.concat(edges)

边缘数据框随后可用于在图形对象中创建边缘。

唯一的问题是上面的代码效率低下,因此提出了更快的解决方案的进一步答案是值得的。