Python панда слияние с несколькими значениями - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь объединить два кадра данных в столбце artist_title. Однако повторные значения могут быть в обоих столбцах. Поскольку я работаю с большим набором данных и большими столбцами, я немного упростил рамки данных.

В df1 может быть упомянуто то же самое artist_title, что и в приведенном ниже примере 'J. Балвин - Ай Вамос.

В df2 также может быть несколько значений для 'J. Балвин - Ай Вамос.

Если он находит artist_title из df1 в df2, то он предоставляет check_code. Если из df2 необходимо вернуть несколько значений, я бы хотел скопировать строку из df1, чтобы добавить дополнительные check_code, чтобы я мог просматривать оба (все) доступные коды.

df1

channel     ID          artist_title

NOW         301         J. Balvin - Ay Vamos
NOW         302         Troye Sivan - Bloom
NOW         303         Christina Milian - Dip It Low
NOW         304         Lorde - Royals
TRENDING    301         J. Balvin - Ay Vamos
TRENDING    305         Mase - Welcome Back
CHILL       306         Bastille - Pompeii

df2:

artist_title               check_code

The Doors - Touch Me       AD9823459
Ricky Martin - She Bangs   SD8845623 
Spice Girls - Wannabe      SDF945345
Daft Punk - Da Funk        KI9023475
J. Balvin - Ay Vamos       URY734586
J. Balvin - Ay Vamos       YH4763523
Troye Sivan - Bloom        EH7623495

Желаемый результат:

channel     ID          artist_title                    check_code

NOW         301         J. Balvin - Ay Vamos            URY734586
NOW         301         J. Balvin - Ay Vamos            YH4763523
NOW         302         Troye Sivan - Bloom             EH7623495
NOW         303         Christina Milian - Dip It Low   NaN
NOW         304         Lorde - Royals                  NaN
TRENDING    301         J. Balvin - Ay Vamos            URY734586
TRENDING    301         J. Balvin - Ay Vamos            YH4763523
TRENDING    305         Mase - Welcome Back             NaN
CHILL       306         Bastille - Pompeii              NaN

Я попытался объединить:

pd.merge(df1, df2, on ='artist_title', how = 'left')

Результаты:

Он создает дополнительные строки, но всегда содержит код проверки из чего-то совершенно другого, а второй - правильный код проверки. Например, что-то вроде этого:

channel     ID          artist_title                    check_code

NOW         301         J. Balvin - Ay Vamos            ABE000149
NOW         301         J. Balvin - Ay Vamos            YH4763523

Поскольку оба столбца содержат повторяющиеся значения, я предполагаю, что мне нужно делать что-то еще, кроме слияния? Как мне лучше всего достичь вышеуказанного?

Добавлено: df1 имеет 4405 значений, df2 имеет 177806 значений. Я хочу, чтобы значения df2 были только в df1. Если нет, то я не хочу их.

1 Ответ

0 голосов
/ 14 ноября 2018

Вы можете создать словарь для сопоставления.

mapper = {}
def make_map(row):
    mapper[row['artist_title']] = row['check_code']
df2.apply(make_map,axis=1)

df['check_code'] = df['artist_title'].map(mapper)

, который должен возвращать ожидаемые результаты (удалял мои результаты, когда я испортил, когда перенес информацию в python, и это заняло целую вечность)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...