首页 > 解决方案 > 比较两个 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 循环编码,它花费的时间太长而且可读性不强。有没有一种有效的方法来做到这一点?谢谢!

标签: pythonpandasdataframe

解决方案


一种方法是提供df1['PersonID'].map()一个 Series ,其索引为PersonID,值为Infected

df1['Infected'] = df1['PersonID'].map(df2.set_index('PersonID')['Infected']).fillna(False)

推荐阅读