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

Graphistry中多列重复节点的合并方法求助

解决Graphistry超图中同一节点跨列被重复创建的问题

你的问题出在hypergraph方法的参数设置上:当你把Previous、Current、Next分别指定为独立的entity_types时,Graphistry会将同一名称在不同列的实例识别为不同类型的节点,导致重复创建。

方案1:将所有列映射为同一实体类型(生成超边)

通过type_mapping参数把三列都归类到同一个实体类型(比如"Person"),这样同一名称无论在哪个列都会被识别为同一个节点,每行数据会生成一个连接三个节点的超边:

import pandas as pd
import graphistry

data = [
    ["Jack", "Lauren", "Brian"],
    ["Lauren", "Brian", "Jaden"],
    ["Brian", "Jaden", "Tessa"],
]

names_df = pd.DataFrame(data, columns=["Previous", "Current", "Next"])

# 统一实体类型映射
hg1 = graphistry.hypergraph(
    names_df,
    entity_types=["Person"],
    type_mapping={
        "Previous": "Person",
        "Current": "Person",
        "Next": "Person"
    }
)

hg1_g = hg1["graph"]
hg1_g.plot()

方案2:构建显式边列表(生成两两连接的普通边)

如果需要每行生成3条两两相连的普通边(而非超边),可以先将每行数据转换成三组节点对,再直接构建图:

import pandas as pd
import graphistry

data = [
    ["Jack", "Lauren", "Brian"],
    ["Lauren", "Brian", "Jaden"],
    ["Brian", "Jaden", "Tessa"],
]

names_df = pd.DataFrame(data, columns=["Previous", "Current", "Next"])

# 生成每行对应的3条边
edges = []
for _, row in names_df.iterrows():
    edges.append({"source": row["Previous"], "target": row["Current"]})
    edges.append({"source": row["Current"], "target": row["Next"]})
    edges.append({"source": row["Previous"], "target": row["Next"]})

edges_df = pd.DataFrame(edges)

# 绑定边数据并绘图
g = graphistry.bind(source="source", target="target").edges(edges_df)
g.plot()

两种方案都会生成5个唯一节点,方案1对应3条超边(每行一条),方案2对应9条普通边(每行三条),可根据你的可视化需求选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 05:24:21