【问题标题】:Building and adjacency matrix from 2 column pandas df从 2 列 pandas df 构建和邻接矩阵
【发布时间】:2021-02-07 01:13:41
【问题描述】:

我正在尝试采用 2 列 pandas df(其中第 1 列是节点 1,第 2 列是节点 2,因此表示节点之间的边)并转换为邻接矩阵。我遵循了来自 SO (Create adjacency matrix for two columns in pandas dataframe) 的以下代码 sn-p,但这不会创建我需要的对称矩阵。它仍然是正确的尺寸,但我们将不胜感激:

数据: 2 column df of edges

代码:

df = pd.crosstab(edges_df[0], edges_df[1])

idx = df.columns.union(df.index)

df = df.reindex(index = idx, columns=idx, fill_value=0)

【问题讨论】:

  • 您好,欢迎来到 StackOverflow!没有看到您的代码,我们无能为力。

标签: python


【解决方案1】:

按照here 提供的示例和答案,您可以简单地创建两个交叉表并将它们合并,

使用那里的示例,并假设我们有如下数据框:

index  Name_A  Name_B
  0    Adam    Ben
  1    Chris   David
  2    Adam    Chris
  3    Ben     Chris

代码

def get_adjacency_matrix(df, col1, col2):
    df = pd.crosstab(df[col1], df[col2])
    idx = df.columns.union(df.index)
    df = df.reindex(index = idx, columns=idx, fill_value=0)
    return df

a_to_b = get_adjacency_matrix(df, "Name_A", "Name_B")
b_to_a = get_adjacency_matrix(df, "Name_B", "Name_A")

symmetric_adjacency_matrix = a_to_b + b_to_a

输出

       Adam  Ben  Chris  David
Adam      0    1      1      0
Ben       1    0      1      0
Chris     1    1      0      1
David     0    0      1      0

【讨论】:

  • 由于某种原因这不起作用,因为我也有类似的代码。矩阵的最大值为 3,这显然是不正确的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-25
  • 1970-01-01
  • 2016-10-15
相关资源
最近更新 更多