比较两个熊猫数据框列的元素,并基于第三列创建一个新列

时间:2019-03-14 02:54:05

标签: python pandas dataframe

我有两个数据框:

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,如果不匹配人员ID,则将相应的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循环编码,它花费的时间太长,而且可读性不强。有一种有效的方法可以做到这一点吗?谢谢!

2 个答案:

答案 0 :(得分:1)

一种方法是为df1['PersonID'].map()提供一个索引为PersonID并且值为Infected的系列:

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

答案 1 :(得分:0)

另一种方法是使用@WebFluxTest(SomeController.class)

<template>
 ...
 <component1 ref='componentOne'>
...
</template>
<script>
  Vue.component('component2', {
    methods: {
     c2method: function(){
       this.$refs.componentOne.c1method();
     }
   }
  });
</script>

pd.merge