合并数据帧

2024-10-03 02:36:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我一整天都在和这个问题作斗争。我有两个数据帧,如下所示:

数据帧1-广告牌

enter image description here

数据帧2

enter image description here

我想合并数据帧2和基于歌曲的数据帧1,最终得到一个具有SongId、song、Rank和Year的数据帧。问题是歌曲的存储方式有一些变化。例:广告牌中的歌曲可以是macarena bayside boys mix,而Dataframe 2中的歌曲可能是macarena。我想找到相似之处。在


Tags: 数据dataframesong方式歌曲yearrankmix
2条回答

我认为您需要计算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

Best match and their cosine distance

一旦找到了最佳匹配项,就可以在df2中查找歌曲ID

最简单的方法是: 1将“Song”作为两个数据帧中的索引列,如下所示

df1.set_index('Song', inplace=True)
df2.set_index('Song', inplace=True)
  1. 使用联接:

joined = df1.join(df2, how='inner')

相关问题 更多 >