2017-06-30 18 views
1

我試圖將2個數據幀與應用函數結合到2個數據幀相同位置的值。如何將2個數據幀與應用功能相結合的相同位置的值

2個數據幀中的每個元素是列表類型,表示項目[col,row]的向量。

df1 : 

    A  B 
0 vec1 vec2  
1 vec1 vec2  
2 vec1 vec2 

df2 : 

    A  B   
0 vec5 vec5  
1 vec6 vec6  
2 vec7 vec7 

function : gensim.matutils.cossim(vec1,vec2) 

Expected new_df : 
    A     B 
0 cossim(vec1,vec5) cossim(vec2,vec5) 
1 cossim(vec1,vec6) cossim(vec2,vec6) 
2 cossim(vec1,vec7) cossim(vec2,vec7) 

下面的代碼是由我來實現:

for column in df1(): 
    new_df[column] = df1[column].apply(matutils.cossim(df1[x],df2.loc[0,column])) 

我得到的錯誤爲:

AttributeError: 'list' object has no attribute 'sqrt'

回答

0

您可以定義自己的function,並將其應用和numpy.vectorize改變它。

import numpy as np 
import pandas as pd 

from sklearn.metrics.pairwise import cosine_similarity 


X = pd.DataFrame([[[0.1,0.1], [0.2,0.2]], [[0.3,0.3], [0.4,0.4]]]) 
Y = pd.DataFrame([[[0.1,0.1], [0.2,0.2]], [[0.3,0.3], [0.4,0.4]]]) 

def func(vecx, vecy): 
    return cosine_similarity(vecx, vecy) 

F = np.vectorize(func)   

print(pd.DataFrame(F(X, Y))) 

你會得到

 0 1 
0 1.0 1.0 
1 1.0 1.0 
相關問題