Слияние фреймов данных

Я боролся с этой проблемой весь день. У меня есть два кадра данных следующим образом:

Dataframe 1 - Рекламные щиты

Фрейм данных 2

Я хотел бы объединить Dataframe 2 с Dataframe 1, основанным на песне, чтобы получить фрейм данных с SongId, Song, Rank и Year. Проблема в том, что существуют некоторые варианты того, как хранятся песни. Например: Song in Billboard может быть смешанным macarena bayside boys, а Song in Dataframe 2 - macarena. Я хотел найти сходство.

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

Лучший матч и их косинусное расстояние

Как только у вас будет лучшее совпадение, вы можете найти идентификатор песни в df2.

Самый простой способ сделать это: 1. Сделать "Песню" в качестве столбца индекса в обоих кадрах данных, например

df1.set_index('Song', inplace=True)
df2.set_index('Song', inplace=True)
  1. Используйте join:

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

Другие вопросы по тегам