我有一个只包含电影标题的数据框(df1):
Movie1 Movie2 Desired
Dinosaur Planet Screamers My Favorite Brunette
Immortal Beloved Strange Relations Chump Change
Clifford Lady Chatterley Invader Zim
另一个带有每部电影的矢量表示的数据帧(df2):
ID Year Title Genre Word Vector
1 2003.0 Dinosaur Planet Documentary [-0.55423898, -0.72544044, 0.33189204, -0.1720...
2 2004.0 Isle of Man Sports & Fitness [-0.373265237, -1.07549703, -0.469254494, -0.4...
3 1997.0 Character Foreign [-1.57682264, -0.91265768, 2.43038678, -0.2114...
4 1994.0 Get Up & Dance Sports & Fitness [0.3096168, -0.57186663, 0.39008939, 0.2868615...
我的目标是在df1中对movie1 + movie2求和,并使用余弦相似度找到df2中最接近的匹配项,并查看它是否与df1中的所需结果匹配。为此,我需要在df1中找到每个电影的矢量表示,并对前两列求和。
我写了一个从df2
查找电影矢量的函数def find_movie_vec(movie_str, df):
'''
Given movie string and dataframe with a 'Title' feature, find the movies with titles containing the string
Assumes no ambiguity within the movie string title
'''
row = df[df['Title'].str.contains(movie_str)]
return row.iloc[0]['Word Vector']
我不确定如何在数据框中应用它,并为movie1,movie2和所需电影的矢量表示创建单独的列。我试过了:
df1.apply(find_movie_vec(...))
但是只应用一个参数函数,所以我想的是:
df1.apply(lambda x, y: find_movie_vec(df1['Movie1'], df2) + find_movie_vec(df1['Movie2']), df2))
但我不确定这是否是最干净甚至更正确的方法。任何建议,将不胜感激!