Python 计算网络中所有可能配对的连接总数

Python 计算网络中所有可能配对的连接总数,python,pandas,Python,Pandas,基于列出源和目标之间连接的数据帧 import pandas as pd df = pd.DataFrame({'source':['A','B','B'],'destination':['B','C','C']}) print(df) source destination 0 A B 1 B C 2 B C 我想计算一个包含所有配对连接数的平方矩阵,即结果数据帧应该是 A B C A

基于列出源和目标之间连接的数据帧

import pandas as pd 
df = pd.DataFrame({'source':['A','B','B'],'destination':['B','C','C']})
print(df)
  source destination
0      A           B
1      B           C
2      B           C
我想计算一个包含所有配对连接数的平方矩阵,即结果数据帧应该是

   A  B  C
A  0  1  0
B  0  0  2       
C  0  0  0
其中索引表示源,列标记目标


我怎样才能到达那里?

使用
pivot\u table
<代码>位置收集所有唯一的条目,以展开最终索引和列,包括零行和零列

将numpy导入为np
位置=np.唯一(df.值)
df.pivot_表(index='source',
列='目标',
aggfunc=len,dropna=False
).loc[位置,位置].fillna(0)
目的地A B C
来源
A 0.01.0 0.0
B 0.0 0.0 2.0
c0.0.0.0
与以下部件一起使用:


以下是我的解决方案,在将字母转换为整数(索引)后计算连接数:


作为pd进口熊猫
将numpy作为np导入
df=pd.DataFrame({'source':['A','B','B'],'destination':['B','C','C']})
打印(df)
节点=np.unique(df)
n_nodes=len(nodes)#假设没有丢失字母
adj=np.zero((n个节点,n个节点))
lett2num=lambda字母:ord(letter.lower())-96#将字母转换为数字,不区分大小写
对于索引,df.iterrows()中的行:
i=lett2num(行源)-1
j=lett2num(行目的地)-1
形容词[i,j]+=1
它为
adj
输出:

数组([[0,1,0.]),
[0., 0., 2.],
[0., 0., 0.]])

您打印的数据框与您输入代码的数据框完全不同?谢谢注意-请查看更正的版本。您可以通过维护一个以source为键的字典来实现这一点,它的值将是dest作为键的字典,no of occurance作为它的值。例如{A:{B:1},B:{C:2}},最后用这些相关信息制作一个矩阵。
v = np.unique(df.values)
df1 = pd.crosstab(df.source, df.destination).reindex(index=v, columns=v, fill_value=0)
print (df1)
destination  A  B  C
source              
A            0  1  0
B            0  0  2
C            0  0  0