Python Pandas-基于不同的电子邮件,使用另一个表中的相同键展开表
我有一个快速的,我正在挣扎 表1除了一个email列和一个惟一ID列之外,还有很多用户信息。 表2只有一个唯一的ID列和一个电子邮件列。这些电子邮件可以不同于表1,但不必如此 我正在尝试合并它们,这样当表2中有一封新的电子邮件在相同的唯一id上时,表1只会展开以包含新行 例如: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
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