python - 比较两个 pandas 数据框列的元素并基于第三列创建一个新列
问题描述
我有两个数据框:
df1:
| ID | PersonID | Sex |
|:--:|:--------:|:---:|
| 1 | 123 | M |
| 2 | 124 | F |
| 3 | 125 | F |
| 4 | 126 | F |
| 5 | 127 | M |
| 6 | 128 | M |
| 7 | 129 | F |
df2:
| ID | PersonID | Infected |
|:--:|:--------:|:--------:|
| 1 | 125 | True |
| 2 | 124 | False |
| 3 | 126 | False |
| 4 | 128 | True |
我想比较这两个数据框中的人员 ID,如果 personID 不匹配,则将相应的 Infected 值插入 df1 和 False 。理想情况下,输出如下所示:
df1:
| ID | PersonID | Sex | Infected |
|:--:|:--------:|:---:|:--------:|
| 1 | 123 | M | False |
| 2 | 124 | F | False |
| 3 | 125 | F | True |
| 4 | 126 | F | False |
| 5 | 127 | M | False |
| 6 | 128 | M | True |
| 7 | 129 | F | False |
我有一个 for 循环编码,它花费的时间太长而且可读性不强。有没有一种有效的方法来做到这一点?谢谢!
解决方案
一种方法是提供df1['PersonID'].map()
一个 Series ,其索引为PersonID
,值为Infected
:
df1['Infected'] = df1['PersonID'].map(df2.set_index('PersonID')['Infected']).fillna(False)
推荐阅读
- python - 我正在尝试在 NVIDIA GPU 上运行 Efficientdet,但无法正常工作
- html - 从 API 获取特定数据(角度)
- python - IT140 项目。在基于 Dragon 文本的游戏的房间中移动
- flutter - flutter 文件存储应用状态
- asp.net - ASP.NET Core 3.1+ 端点路由优先级
- javascript - 如何从 Object.value 中找到平均值 - 错误 NaN
- python - 填充浮点列的 np.nan 条目给出 ValueError: fill value must be in categories
- c# - Microsoft.Office.Interop.Word.dll - InvalidCastException
- javascript - Tailwind CSS 不使用 React 和 Express 编译?
- python - 如何从行值中删除除 int 的第一个实例之外的所有内容?