python - 更新加入熊猫 - python
问题描述
如何在 pandas 原生语句(.apply())上实现更新加入?我想在 Dataframe1 中PSMark
从 Dataframe2更新PhySci
数据框1(tbl_ex):
| | Sname | Tamil | English | Maths | Science | Sscience | PhySci |
|---:|:--------|--------:|----------:|--------:|----------:|-----------:|---------:|
| 0 | Abu | 35 | 65 | 64 | 98 | 36 | 0 |
| 1 | Eric | 70 | 54 | 65 | 32 | 58 | 25 |
| 2 | Mani | 56 | 25 | 32 | 32 | 78 | 10 |
| 3 | Ram | 80 | 24 | 68 | 54 | 76 | 0 |
| 4 | Tom | 40 | 26 | 56 | 69 | 42 | 65 |
| 5 | Eva | 50 | 18 | 56 | 87 | 56 | 0 |
数据框2(tbl_fy):
| | Sname | PSMark |
|---:|:--------|---------:|
| 0 | Tom | 69 |
| 1 | Ram | 54 |
| 2 | Mani | 32 |
| 3 | Eva | 87 |
| 4 | Sam | 89 |
我用 sqldf 模块实现了这一点
q="""
UPDATE tbl_ex
SET
PhySci = (SELECT tbl_fy.PSMark
FROM tbl_fy
WHERE tbl_fy.Sname = tbl_ex.Sname )
WHERE
EXISTS (
SELECT *
FROM tbl_fy
WHERE tbl_fy.Sname = tbl_ex.Sname );
"""
sqldf.run(q)
print(tbl_ex.to_markdown())
tbl_ex 的最终结果:
| | Sname | Tamil | English | Maths | Science | Sscience | PhySci |
|---:|:--------|--------:|----------:|--------:|----------:|-----------:|---------:|
| 0 | Abu | 35 | 65 | 64 | 98 | 36 | 0 |
| 1 | Eric | 70 | 54 | 65 | 32 | 58 | 25 |
| 2 | Mani | 56 | 25 | 32 | 32 | 78 | 32 |
| 3 | Ram | 80 | 24 | 68 | 54 | 76 | 54 |
| 4 | Tom | 40 | 26 | 56 | 69 | 42 | 69 |
| 5 | Eva | 50 | 18 | 56 | 87 | 56 | 87 |
解决方案
使用,在列上pd.merge
左合并数据框df1
和,然后使用从列中填充列中的值并将列分配给:df2
Sname
Series.fillna
NaN
PSMark
PhySci
PSMark
PhySci
df = pd.merge(df1, df2, on='Sname', how='left')
df = df.assign(PhySci=df.pop('PSMark').fillna(df['PhySci']).astype(int))
结果:
# print(df)
Sname Tamil English Maths Science Sscience PhySci
0 Abu 35 65 64 98 36 0
1 Eric 70 54 65 32 58 25
2 Mani 56 25 32 32 78 32
3 Ram 80 24 68 54 76 54
4 Tom 40 26 56 69 42 69
5 Eva 50 18 56 87 56 87
推荐阅读
- python - 如何在将 JSON 解析为 pandas 数据框时删除父级?
- xml - XSLT 2.0 参数列表/映射,每个
- api - VueJS Axios API,试图只得到1个结果,不多
- parameters - history.push 在反应 js 中附加查询参数
- jwt - 阻止 JWT 令牌 AdonisJS
- node.js - 推送到 Github 时出错,我该如何解决?
- gem5 - 如何在 gem5 se 模式下按顺序运行多个进程?
- javascript - nodejs mongodb 显示错误..数据已从数据库中获取..我已通过登录 productHelpers 确认...此处日志不起作用
- javascript - IE-11:对象不支持属性或方法“parseInt”
- html - 根据父母填充颜色?