修改数据框中的行(如果它存在于另一个数据框中)

时间:2019-07-26 10:51:49

标签: python pandas

我有两个数据帧DfMasterDfError

DfMaster如下:

     Id           Name Building
0  4653     Jane Smith        A
1  3467    Steve Jones        B
2    34        Kim Lee        F
3  4567     John Evans        A 
4  3643   Kevin Franks        S
5   244  Stella Howard        D

DfError看起来

     Id           Name Building
0  4567     John Evans        A 
1   244  Stella Howard        D

DfMaster中,如果记录的Building值出现在DD数据框中,则要将其更改为DfError。所以我想要的输出是:

     Id           Name Building
0  4653     Jane Smith        A
1  3467    Steve Jones        B
2    34        Kim Lee        F
3  4567     John Evans        DD 
4  3643   Kevin Franks        S
5   244  Stella Howard        DD

我正在尝试使用以下内容:

DfMaster.loc[DfError['Id'], 'Building'] = 'DD'

但是我得到一个错误:

KeyError: "None of [Int64Index([4567,244], dtype='int64')] are in the [index]"

请让我知道我做错了什么

谢谢

2 个答案:

答案 0 :(得分:1)

使用np.where

import numpy as np
errors = list(dfError['id'].unqiue())
dfMaster['Building_id'] = np.where(dfMaster['Building_id'].isin(errors),'DD',dfMaster['Building_id'])

答案 1 :(得分:1)

DataFrame.loc希望您输入索引或布尔序列,而不是列中的值。

我相信这应该可以解决问题:

DfMaster.loc[DfMaster['Id'].isin(DfError['Id']), 'Building'] = 'DD'

基本上,这是在说: 对于DfError['Id']中存在ID值的所有行,将'Building'的值设置为'DD'