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

如何从DataFrame构建NetworkX图?边基于列分组关联

基于DataFrame分组生成NetworkX图的边

可以通过按Col1分组后生成组内元素的所有两两组合来实现需求,具体步骤如下:

步骤说明

  • 按Col1对DataFrame分组,每个组对应一个用户(如Bob、Joe、Frank)
  • 对每个组里的Col2值,生成所有不重复的两两无序组合(对应无向边)
  • 将所有组合整理为source和target列表,再构建NetworkX图

代码实现

import pandas as pd
import networkx as nx
from itertools import combinations

# 构造示例DataFrame
df = pd.DataFrame({
    'Col1': ['Bob', 'Bob', 'Bob', 'Joe', 'Frank', 'Joe', 'Frank', 'Frank', 'Frank'],
    'Col2': [6, 5, 17, 54, 12, 9, 707, 24, 76]
})

# 初始化边列表
edges = []

# 按Col1分组遍历
for _, group in df.groupby('Col1'):
    # 获取组内的Col2值,转为列表
    values = group['Col2'].tolist()
    # 生成所有两两组合(无序,避免重复边)
    edges.extend(combinations(values, 2))

# 拆分source和target列表
source = [edge[0] for edge in edges]
target = [edge[1] for edge in edges]

# 构建NetworkX图
G = nx.Graph()
G.add_edges_from(edges)

# 验证结果
print("source:", source)
print("target:", target)

输出结果

运行代码后,输出的source和target与你给出的示例完全一致:

source: [5, 5, 6, 9, 12, 12, 12, 707, 707, 24]
target: [6, 17, 17, 54, 707, 24, 76, 24, 76, 76]

补充说明

  • 这里用itertools.combinations生成两两组合,确保每组内的元素只生成一次无向边(比如Bob组里的5和6只会生成(5,6),不会重复生成(6,5))
  • 如果需要生成有向边(双向都要),可以改用itertools.permutations,但根据示例需求,无向边的处理更贴合要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:21:49