2016-06-20 15 views
1

私はパンダには新しく、これらの2つのシリーズがあります。パンダのコラムのコサイン類似度を計算する

train['description_1']およびtrain['description_2']はシリーズです。それらはそれぞれ、各行のベクトルを含みます。

from scipy.spatial.distance import cosine 
item3 = pd.concat([train['description_1'], train['description_2']], axis = 1) 
cos_vec = item3.apply(cosine) 

例外TypeError: ('cosine() takes exactly 2 arguments (1 given)', u'occurred at index description_1')

列車[ '記述']の各要素は、ベクターを含有するであろう。

私はあなたが必要とするこの

train_1  train_2 
[1.0,2.0]  [2.0,3.0] 
[2.0,2.0]  [3.0,2.0] 


Output: 

cos_sim 
x 
y 
+0

、' cosine'が繰り返し入力として、各列がかかりますがだからこそ、それはただ一つの引数を受け取るのです。 – IanS

+0

どうすればこの問題を解決できますか? – aceminer

答えて

3

のようなものを期待しています:

import pandas as pd 
from scipy.spatial.distance import cosine 

df = pd.DataFrame({'description_1':[0.1,0.32,0.3], 
        'description_2':[0.4,0.5,0.6]}) 


print (df) 
    description_1 description_2 
0   0.10   0.4 
1   0.32   0.5 
2   0.30   0.6 

cos_vec = (1 - cosine(df["description_1"], df["description_2"])) 
print (cos_vec) 
0.962571458085 

EDIT:apply` `インサイド

import pandas as pd 
from scipy.spatial.distance import cosine 

df = pd.DataFrame({'description_1':[[1.0,2.0],[2.0,2.0]], 
        'description_2':[[2.0,3.0],[3.0,2.0]]}) 


print (df) 
    description_1 description_2 
0 [1.0, 2.0] [2.0, 3.0] 
1 [2.0, 2.0] [3.0, 2.0] 

cos_vec = df.apply(lambda x: (1 - cosine(x["description_1"], x["description_2"])), axis=1) 
print (cos_vec) 
0 0.992278 
1 0.980581 
dtype: float64 
+0

しかし、私はシリーズのすべての要素についてこれを行う必要があります – aceminer

+0

編集を参照してください。 – jezrael

関連する問題