如何在一个数据框中查找另一个数据框中的多个列的值

时间:2017-08-21 18:06:25

标签: pandas dataframe apply matching

我有一个只包含电影标题的数据框(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))

但我不确定这是否是最干净甚至更正确的方法。任何建议,将不胜感激!

0 个答案:

没有答案