Слияние фреймов данных - PullRequest
0 голосов
/ 28 мая 2018

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

кадр данных 1 - рекламные щиты

enter image description here

кадр данных 2

enter image description here

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

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Я думаю, вам нужно рассчитать меру сходства между списком песен в 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

0 голосов
/ 28 мая 2018

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

df1.set_index('Song', inplace=True)
df2.set_index('Song', inplace=True)
Использовать соединение:

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

...