从数组及其转置创建邻接矩阵

时间:2018-11-27 11:42:36

标签: python pandas numpy adjacency-matrix

我有一个像这样的pandas DataFrame:
enter image description here

我想创建一个像这样的对称矩阵:
enter image description here

该值实际上是两个列表的交集的长度。因此,我做了这个功能:

declare @Persons_Temp as table
(
FirstName varchar(20),
LastName varchar(20),
Salary INT
)

INSERT INTO @Persons_Temp
SELECT CASE WHEN LEN(FirstName) <= 5 THEN FirstName + '_' + convert(varchar(20),LEN(FirstName)) 
ELSE FirstName END, LastName, Salary 
FROM Persons


SELECT * FROM @Persons_Temp

那里是否有类似此功能的功能:

 def intersectSize(l1, l2):
     return len(set(l1) & set(l2))

其中def createSymMatrix(array, func): ... return matrix 是我的初始数据帧,而arrayfunc函数?

编辑:用这两个衬线弄清楚了:

intersectSize

1 个答案:

答案 0 :(得分:1)

我认为您需要这个

r=[]
for val in list(itertools.product(df[0].values,df[0].values)):
    r.append( len(set(val[0])&set(val[1])) )
print pd.DataFrame(np.array(r).reshape(len(df),-1))

使用列表理解:

t= [len(set(val[0])&set(val[1])) for val in list(itertools.product(df[0].values,df[0].values))]
print pd.DataFrame(np.array(t).reshape(len(df),-1))

输出:

   0  1  2  3
0  3  0  0  1
1  0  1  0  1
2  0  0  2  0
3  1  1  0  2