You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用NetworkX从Pandas DataFrame创建带边属性的有向多重图?

NetworkX 创建带属性的有向多重图方法
  • 先修正图类型:你需要的是有向多重图,所以create_using参数要传入nx.MultiDiGraph(),而不是无向的nx.MultiGraph。

  • 基于DataFrame直接创建带属性的图:
    确保你的DataFrame包含所有要作为边属性的列(比如发送日期、接收日期、信件内容等),然后修改from_pandas_edgelist的调用方式,把所有目标属性列名放进edge_attr列表:

    G1 = nx.from_pandas_edgelist(
        df,
        source="letter_sent",  # 替换为你的发件人列名
        target="letter_recd",  # 替换为你的收件人列名
        edge_attr=["send_date", "recv_date", "content"],  # 替换为实际要作为属性的列名
        create_using=nx.MultiDiGraph()
    )
    

    如果你原本的letter_sent_recd是属性列,直接把它加入edge_attr列表即可。

  • 正确查看边属性:
    直接打印G1.edges只会显示(源节点, 目标节点, 边key)格式的元组,要查看属性需要用edges(data=True):

    # 遍历所有边并打印属性
    for u, v, key, attrs in G1.edges(keys=True, data=True):
        print(f"发件人 {u} -> 收件人 {v} (边标识: {key}): 属性 {attrs}")
    

    也可以单独获取某条边的指定属性:

    # 假设已知边的源、目标和key
    content = G1.edges["某发件人", "某收件人", 0]["content"]
    
  • 后续手动添加边属性:
    如果需要在创建图后补充属性,可通过遍历边赋值:

    for u, v, key in G1.edges(keys=True):
        # 示例:给每条边添加信件数量属性
        G1.edges[u, v, key]["letter_count"] = 1
    

内容的提问来源于stack exchange,提问作者user2626174

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 09:57:33