Python Pandas-基于不同的电子邮件,使用另一个表中的相同键展开表

Python Pandas-基于不同的电子邮件,使用另一个表中的相同键展开表,python,pandas,join,merge,Python,Pandas,Join,Merge,我有一个快速的,我正在挣扎 表1除了一个email列和一个惟一ID列之外,还有很多用户信息。 表2只有一个唯一的ID列和一个电子邮件列。这些电子邮件可以不同于表1,但不必如此 我正在尝试合并它们,这样当表2中有一封新的电子邮件在相同的唯一id上时,表1只会展开以包含新行 例如: Table 1: id email first_name last_name 1 jo@ joe king 2 john@ johnny

我有一个快速的,我正在挣扎

表1除了一个email列和一个惟一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.mergetable1,table2,on='id',how='left'这样做,但这只会生成后缀为x,y的电子邮件列

如何进行合并?

IIUC,您可以使用isn for df2和groupby.ffill尝试使用带有布尔掩码的pd.concat:

IIUC,您可以使用isn for df2和groupby.ffill尝试使用带有布尔掩码的pd.concat:


这绝对解决了问题,它太脏了@狼可能是,你可以等着看你是否能找到更干净的东西:你肯定会得到一张选票,我真的很感谢你的帮助。我没有更好的答案了。我会把它打开一点,看看是否有人想出了有趣的东西。这肯定能解决问题,它太脏了@狼可能是,你可以等着看你是否能找到更干净的东西:你肯定会得到一张选票,我真的很感谢你的帮助。我没有更好的答案了。不过我会把它打开一点,看看有没有人能想出一些有趣的东西。
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