【发布时间】:2019-04-17 16:19:04
【问题描述】:
我正在尝试合并列 artist_title 上的两个数据框。但是,重复值可能在两列中。在处理大型数据集和大型列时,我稍微简化了数据框。
在df1 中,可以提到相同的artist_title,如下例'J. Balvin - Ay Vamos'。
在df2 中,'J 也可以有多个值。 Balvin - Ay Vamos'。
如果在df2 中从df1 中找到artist_title,则提供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 中)。如果不是,那我就不要它们了。
【问题讨论】:
-
您是否尝试过使用
how='outer'? -
是的,但这不是我想要的:df1 包含 4405 个值(我想要合并的值),df2 包含 177806 个值。我不想要 df1 中未提及的任何来自 df2 的值
-
那么您可以只在左侧字段中使用
dropna,例如channel或ID。 (此外,如果您使数据框可复制,则更容易测试我们的答案) -
我可能弄错了,但看起来您可能希望
df2作为合并中的left表,不是吗?将 ID 和诸如此类的内容添加到现有的检查代码中? -
这听起来可能是数据问题而不是合并问题。您是否查看过 DF 中存在正确和错误 ID 和校验码的行?
标签: python python-3.x pandas dataframe