【问题标题】:Directed networks and weight on the edges with networkx使用networkx的有向网络和边缘权重
【发布时间】:2019-05-21 19:19:13
【问题描述】:

我有以下熊猫日期框:

df = pd.DataFrame({
    'id_emp':[13524791000109, 12053850000137, 4707821000113],
    'name_emp': [
        'JL Consultores',
        'GRAAL OURINHOS',
        'SOJA COMERCIO DE DERIVADOS DE PETROLEO LTDA'
    ],
    'name_dep': [
        'DIONILSO MATEUS MARCON',
        'JOSE AUGUSTO ROSA',
        'LUCIO ANTONIO MOSQUINI'
    ],
    'donnated_value': [ 750.00, 5000.00, 27350.00],
    'donnated_amount': [1,1,1],
    'reimbursed_value':[36000.00,410.55, 241.22],
    'amount_reimbursed': [1,2,1],
    'roi':[4800.00, 8.21,0.88]
})

我需要创建一个有向网络,其中 df['name_dep'] 和 df['id_emp] 是节点。然后,数据帧的每一行都提供两个节点,由具有权重的边连接。边的权重与 roi 列一致:对于 roi 的值在 0 到 100 之间,权重等于 1;介于 100 和 1000 之间,权重等于 2;最多 1000,权重等于 3。如下面的代码,我可以为特定的 name_dep 绘制一个网络:

G = nx.Graph()
deputado = 'DIONILSO MATEUS MARCON'
lista_subset_graph = list(df[df["name_dep"] == deputado]["id_emp"]) + 
[deputado]
H = G.subgraph(lista_subset_graph)
nx.draw(H, style = "solid", with_labels = True)
plt.savefig("teste.png")  
plt.show() 

现在有必要像所有节点一样绘制网络,并在边缘添加权重。感谢您的帮助。

【问题讨论】:

    标签: python pandas networkx


    【解决方案1】:
    # Create graph
    G = nx.Graph()
    # Add id_emp nodes
    G.add_nodes_from(df['id_emp'])
    # Set 'name_emp' attribute for 'name_emp' column values
    for node in G.nodes:
        G.nodes[node]['name_emp'] = df.loc[df['id_emp'] == node]['name_emp'].values[0]
    # Add name_dep nodes
    G.add_nodes_from(df['name_dep'])
    # Create the new column with transformed 'roi' values
    df['roi_new'] = df['roi'].apply(
        lambda x: 1 if x < 100 else 2 if 100 <= x < 1000 else 3
    )
    # Add weighted edges
    G.add_weighted_edges_from(df[['id_emp', 'name_dep', 'roi_new']].values)
    

    附:看起来你应该交换 name_depname_empname_emp 中的值更适合 name_dep

    【讨论】:

    • 谢谢。我想区分不同类型的节点。我该怎么做?
    • 您可以添加类似于循环的type_属性与此评论:# Set 'name_emp' attribute for 'name_emp' column values
    猜你喜欢
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 2020-12-16
    • 2017-05-15
    • 2014-05-22
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多