该值实际上是两个列表的交集的长度。因此,我做了这个功能:
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
是我的初始数据帧,而array
是func
函数?
编辑:用这两个衬线弄清楚了:
intersectSize
答案 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