为了账号安全,请及时绑定邮箱和手机立即绑定

Python熊猫与多个值合并

Python熊猫与多个值合并

catspeake 2021-08-17 18:30:27
我正在尝试合并列上的两个数据框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_titleNOW         301         J. Balvin - Ay VamosNOW         302         Troye Sivan - BloomNOW         303         Christina Milian - Dip It LowNOW         304         Lorde - RoyalsTRENDING    301         J. Balvin - Ay VamosTRENDING    305         Mase - Welcome BackCHILL       306         Bastille - Pompeiidf2:artist_title               check_codeThe Doors - Touch Me       AD9823459Ricky Martin - She Bangs   SD8845623 Spice Girls - Wannabe      SDF945345Daft Punk - Da Funk        KI9023475J. Balvin - Ay Vamos       URY734586J. Balvin - Ay Vamos       YH4763523Troye Sivan - Bloom        EH7623495期望的结果:channel     ID          artist_title                    check_codeNOW         301         J. Balvin - Ay Vamos            URY734586NOW         301         J. Balvin - Ay Vamos            YH4763523NOW         302         Troye Sivan - Bloom             EH7623495NOW         303         Christina Milian - Dip It Low   NaNNOW         304         Lorde - Royals                  NaNTRENDING    301         J. Balvin - Ay Vamos            URY734586TRENDING    301         J. Balvin - Ay Vamos            YH4763523TRENDING    305         Mase - Welcome Back             NaNCHILL       306         Bastille - Pompeii              NaN我尝试合并:pd.merge(df1, df2, on ='artist_title', how = 'left')结果:它确实创建了额外的行,但它总是包含一个完全不同的“check_code”,第二个是正确的“check_code”。例如,这样的事情:channel     ID          artist_title                    check_codeNOW         301         J. Balvin - Ay Vamos            ABE000149NOW         301         J. Balvin - Ay Vamos            YH4763523由于两列都包含重复的值,我猜我需要做除合并之外的其他事情?我怎样才能最好地实现上述目标?补充:df1有 4405 个值,df2有 177806 个值。我只希望有值的df2,如果他们都在df1。如果没有,那我不要他们。
查看完整描述

1 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

你可以制作一个字典来映射。


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 时我搞砸了,这花了很长时间)


查看完整回答
反对 回复 2021-08-17
  • 1 回答
  • 0 关注
  • 110 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信