Python熊猫与多个值合并

我正在尝试合并列上的两个数据框artist_title。但是,重复值可能在两列中。由于我正在处理大型数据集和大型列,因此我稍微简化了数据框。


在 中df1,artist_title可以提到与下面的示例'J. Balvin - Ay Vamos'。


在 中df2,'J 也可以有多个值。Balvin - Ay Vamos'。


如果它artist_title从df1in 中找到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')

结果:


它确实创建了额外的行,但它总是包含一个完全不同的“check_code”,第二个是正确的“check_code”。例如,这样的事情:


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。如果没有,那我不要他们。


catspeake
浏览 125回答 1
1回答

天涯尽头无女友

你可以制作一个字典来映射。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 时我搞砸了,这花了很长时间)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python