python - Pandas - 如果同一行的其他值出现在第二个数据框中,则替换列的值
问题描述
输入是两个数据帧。以下是它们的简短版本,只有几行。
df1
+-----+------+------+
| No | Type | Desc |
+-----+------+------+
| 123 | A | Bla |
| 123 | B | Bla |
| 123 | D | Bla |
| 342 | A | Bla |
| 342 | C | Bla |
| 543 | B | Bla |
| 543 | C | Bla |
+-----+------+------+
df2
+-----+------+------+
| No | Type | Desc |
+-----+------+------+
| 123 | A | Lala |
| 342 | A | Lala |
| 342 | C | Lala |
+-----+------+------+
两个数据框都比上面的列多,但在这种情况下,其他的无关紧要。
我想将 column 的值更改Desc
为Done
for rows ,df1
以防该行(意思No
和Type
)也出现在df2
.
df1
+-----+------+------+
| No | Type | Desc |
+-----+------+------+
| 123 | A | Done |
| 123 | B | Bla |
| 123 | D | Bla |
| 342 | A | Done |
| 342 | C | Done |
| 543 | B | Bla |
| 543 | C | Bla |
+-----+------+------+
谢谢 :)
解决方案
merge
与 一起使用numpy.where
:
df3 = df1[['No','Type']].merge(df2, on=['No','Type'], how='left')
df3['Desc'] = np.where(df3['Desc'].notnull(), 'Done', df1['Desc'])
print (df3)
No Type Desc
0 123 A Done
1 123 B Bla
2 123 D Bla
3 342 A Done
4 342 C Done
5 543 B Bla
6 543 C Bla
推荐阅读
- c++ - 在 CLion 中:CMake 无法找到与“Unix Makefiles”对应的构建程序
- browser-cache - Ctrl+5F 显示两种不同类型的显示
- node.js - 从弹性查询中找到准确的匹配结果
- php - 如何在 PHP 中“回显”多维数组?
- python - 尝试构建具有多个输出的 TF2 模型,但得到 InvalidArgumentError:无法挤压 dim[1],预期维度为 1,得到 8
- java - 如何更新在谷歌播放控制台上发布的 Java 应用程序以颤振应用程序
- flutter - 即使设备已启动,颤动也会显示“无设备”
- reactjs - 我的 react redux 应用程序出了什么问题,因为它没有按预期呈现东西?
- angular - 生成的组件标签可以更改吗?
- laravel - Vue JS - 我如何在我的 javascript 过滤函数中调用可能的数据