Convert pandas list of edges to sparse transition matrix with dictionary for nodes row and column positions?
我有一个–大–数据框,其中包含二部图中的边列表。 我想将其转换为python稀疏转换矩阵。
所以我有一个数据框,其中包含将第1部分(a,b,c)中的节点与第(x,y,z)部分相连的边的列表。 边具有多重性:在示例中,从b到y有两个边。
1 2 3 4 5 6 7 | start end multiplicity a x 1 a y 1 b y 2 b z 1 c x 1 c z 1 |
我想要的结果是一个稀疏矩阵,在这种情况下为3x3。 我有第1部分和第2部分的字典,指示哪个节点对应于结果转换矩阵的哪行和哪列:
1 2 | dic1 = {'a':0,'b':1,'c':2} dic2 = {'x':1,'y':0,'z':2} |
所以我想要矩阵
1 2 3 4 | y x z a 1 1 0 b 2 0 1 c 0 1 1 |
...但稀疏(csr_matrix,lil_matrix或coo_matrix)。 我尝试遍历边缘列表,但是对于长列表来说太慢了。
同样,基于数据透视的方法将生成完整的矩阵,这将很慢并且会消耗内存。
是否有一种有效的方法来获取我想要的稀疏矩阵
据我了解,您可以尝试将
1 2 | m = df.pivot(*df).fillna(0).rename_axis(index=None,columns=None) final = m.reindex(index=m.index[m.index.map(dic1)],columns=m.columns[m.columns.map(dic2)]) |
1 2 3 4 5 6 | print(final) y x z a 1.0 1.0 0.0 b 2.0 0.0 1.0 c 0.0 1.0 1.0 |