python - 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 的电子邮件列。
我怎样才能进行合并?
解决方案
IIUC,您可以尝试pd.concat
使用isn
for的布尔掩码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
推荐阅读
- vmware-clarity - 将模态添加到正文元素
- image - RuntimeError:无法序列化消息
- pysnmp - PySNMP如何转换为dot oid
- python - 在 Django 中使用从表单返回的数据
- node.js - 未在 sls deploy 上创建无服务器步进功能状态机
- cs50 - CS50 复数问题,错误:使用未声明的标识符“i”
- r - 将来自 for 循环的多个 ggplots 保存在特定布局中的单个图中
- python-3.x - 即使手动工作,Selenium 也无法单击表格行
- docker - 可以在容器到容器之间共享文件夹吗?
- php - 如何通过属性值 PhP 对 xml 子项进行排序