繁体   English   中英

从边列表创建直接边矩阵

[英]Create a direct edge matrix from edge list

样本数据:

data = { 
    'node1': [1, 1,1, 2,2,5],
 'node2': [8,16,22,5,25,10],
 'weight': [1,1,1,1,1], }
df = pd.DataFrame(data, columns = ['node1','node2','weight'])

给定的数据是边列表,第一列表示node 1 ,第二列表示直接连接到第一个节点的节点。 给定的是一个边列表,第column 1作为node1 ,第column 2作为node2和权重。 我想创建一个矩阵,每一行代表给定节点的所有直接边。 (每一行是一个节点,其中的列是给定节点的直接边)使用 Pandas Dataframe。

输出:

8   16  22

5   25  0

0   0   0

0   0   0

10  0   0

国际大学联盟

df=df.assign(Cu=df.groupby('node1').cumcount()).set_index('Cu').groupby('node1').apply(lambda x : x['node2']*x['weight']).unstack('Cu').fillna(0)
df
Out[71]: 
Cu        0     1     2
node1                  
1       8.0  16.0  22.0
2       5.0  25.0   0.0
5      10.0   0.0   0.0

为了让你摆脱困境,你可以reindex + fillna

编辑:注意你的预期输出 contian 一些全 0 行,

df.reindex([1,2,3,4,5]).fillna(0)
Out[107]: 
Cu        0     1     2
node1                  
1       8.0  16.0  22.0
2       5.0  25.0   0.0
3       0.0   0.0   0.0
4       0.0   0.0   0.0
5      10.0   0.0   0.0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM