2014-09-09 2 views
1

Предположат, что у меня есть два столбца в питоне pandas.DataFrame:Python панда: Нахождение косинуса сходства двух столбцов

  col1 col2 
item_1 158 173 
item_2  25 191 
item_3 180 33 
item_4 152 165 
item_5  96 108 

Какой самый лучший способ взять косинус сходство этих двух столбцов?

+0

Для ясности, я предполагаю, что вы имеете в виду: кроме просто применяя формулу, т.е. вычисления величин, нормализующее и делая суммарный продукт. – Leo

+0

@leo Да, я имею в виду, что является самым оптимизированным способом. Однако, если есть функциональный способ, который занимает всего несколько строк, я тоже буду этому доволен. – hlin117

+0

Похоже, что в [Scipy] есть соответствующие функции (http://docs.scipy.org/doc/scipy/reference/spatial.distance.html) – Marius

ответ

8

Это вы что искали?

from scipy.spatial.distance import cosine 
from pandas import DataFrame 


df = DataFrame({"col1": [158, 25, 180, 152, 96], 
       "col2": [173, 191, 33, 165, 108]}) 

print(1 - cosine(df["col1"], df["col2"])) 
+0

Один лайнер всегда приветствуется, спасибо! Я думаю, что слишком много внимания уделяю поиску функций внутри python pandas, но не смотрю на пакеты, с которыми он интегрируется, как scipy. – hlin117

+0

Обратите внимание, что если у вас есть две разные серии с разными индексами, значения «NaN» будут проигнорированы вычислением подобия косинуса, что приведет к некорректному ответу, поскольку нормы в знаменателе будут вычисляться некорректно (некоторые значения будут опущены для выравнивания с другими сериями) – osa

0

Вы также можете использовать cosine_similarity или другие метрики подобия образуют sklearn.metrics.pairwisedocs

from sklearn.metrics.pairwise import cosine_similarity 

cosine_similarity(df.col1, df.col2) 
Out[4]: array([[0.7498213]])