首页 > 解决方案 > Pandas - 根据来自另一个表的具有相同密钥的不同电子邮件扩展表

问题描述

我有一个快速的,我正在努力。

表 1 除了电子邮件列和唯一 ID 列之外,还有很多用户信息。表 2 只有一个唯一 ID 列和一个电子邮件列。这些电子邮件可能与表 1 不同,但并非必须如此。

我正在尝试合并它们,以便当表 2 中存在具有相同唯一 ID 的新电子邮件时,表 1 仅扩展为包含新行。

例子:

Table 1: 

id   email   first_name    last_name 
1    jo@       joe          king
2    john@     johnny       maverick
3    Tom@      Tom          J


Table 2: 

id   email   
2    johnmk@  
3    TomT@  
8    Jared@


Desired Output:

id   email   first_name    last_name 
1    jo@       joe          king
2    john@     johnny       maverick
2    johnmk@   johnny       maverick
3    Tom@      Tom          J
3    TomT@     Tom          J

我本来希望pd.merge(table1, table2, on = 'id', how = 'left')这样做,但这只会生成带有后缀 _x、_y 的电子邮件列。

我怎样才能进行合并?

标签: pythonpandasjoinmerge

解决方案


IIUC,您可以尝试pd.concat使用isnfor的布尔掩码df2,其中groupby.ffill

out = pd.concat((df1,df2[df2['id'].isin(df1['id'])]),sort=False)
out.update(out.groupby("id").ffill())
out = out.sort_values("id")#.reset_index(drop=True)

   id    email first_name last_name
0   1      jo@        joe      king
1   2    john@     johnny  maverick
0   2  johnmk@     johnny  maverick
2   3     Tom@        Tom         J
1   3    TomT@        Tom         J

推荐阅读