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

如何基于DataFrame多列唯一值创建加权邻接矩阵?

多列DataFrame生成加权邻接矩阵

核心思路

每一行中的所有元素(国家、机构、部门、个人)属于同一关联组,我们需要统计任意两个元素在同一行中共同出现的次数,以此作为邻接矩阵的权重值。

实现步骤

  1. 构建示例数据
import pandas as pd
import itertools

data = {
    '国家': ['USA', 'UK', 'China', 'Argentina'],
    '机构': ['Apple', 'Apple', 'Apple', 'Bosch'],
    '部门': ['Marketing', 'Marketing', 'Finance', 'Marketing'],
    '个人': ['John Fowler', 'Peter Pan', 'John Fowler', 'Messi']
}
df = pd.DataFrame(data)
  1. 生成行内元素的所有有序配对
    遍历每一行,提取所有元素并生成两两有序组合,确保双向关联都被统计(比如USA和Apple的关联,同时记录(USA, Apple)和(Apple, USA)):
pairs = []
for _, row in df.iterrows():
    elements = row.tolist()
    # 生成所有两两有序配对
    for pair in itertools.permutations(elements, 2):
        pairs.append(pair)
  1. 统计配对次数并构建邻接矩阵
    将配对数据转为DataFrame,利用交叉表统计次数,最后将对角线值设为0(自身无连接):
pair_df = pd.DataFrame(pairs, columns=['source', 'target'])
# 生成加权邻接矩阵
adj_matrix = pd.crosstab(pair_df['source'], pair_df['target'])
# 对角线元素置0
for idx in adj_matrix.index:
    adj_matrix.loc[idx, idx] = 0
  1. 输出结果
    执行print(adj_matrix)即可得到你需要的加权邻接矩阵,与示例完全匹配。

补充说明

  • 使用itertools.permutations而非combinations,是为了直接生成双向配对,无需后续手动对称填充矩阵;
  • 交叉表pd.crosstab会自动统计每个配对出现的次数,正好对应邻接矩阵的权重值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 12:55:33