我整天都在努力解决这个问题。我有两个数据帧如下:
Dataframe 1 - Billboards
Dataframe 2
我想将Dataframe 2与基于歌曲的Dataframe 1合并,最终得到一个具有SongId,Song,Rank和Year的数据帧。问题是歌曲的存储方式有一些变化。例如:广告牌中的歌曲可以是macarena bayside boys混音,而Dataframe 2中的歌曲可能是macarena。我想找到相似之处。
答案 0 :(得分:1)
我认为你需要计算df1和df2中歌曲列表之间的相似性度量。我试着通过计算随机生成的歌曲列表中df1和df2中歌曲之间的余弦距离来试一试。
from sklearn.feature_extraction.text import TfidfVectorizer
vect = TfidfVectorizer(min_df=1)
Song1 = ["macarena bayside boys mix", "cant you hear my heart beat", "crying in the chapell", "you were on my mind"]
Song2 = ["cause im a man", "macarena", "beat from my heart"]
dist_dict = {}
match_dict = {}
for i in Song1 :
for j in Song2 :
tfidf = vect.fit_transform([i, j])
distance = ((tfidf * tfidf.T).A)[0,1]
if i in dist_dict.keys():
if dist_dict[i] < distance :
dist_dict[i] = distance
match_dict[i] = j
else :
dist_dict[i] = distance
获得最佳匹配后,您可以在df2中查找歌曲ID
答案 1 :(得分:0)
最简单的方法: 1.制作&#34;歌曲&#34;作为两个数据框中的索引列,如
df1.set_index('Song', inplace=True)
df2.set_index('Song', inplace=True)
joined = df1.join(df2, how='inner')