从数据框df1获取行并在df2中搜索,如果匹配,则将特定列的值从df1复制到df2

时间:2020-05-22 08:22:53

标签: pandas dataframe

我有df1:

ID  Label1   Label2  Cat
P203  car    ded      34
P560  bk     green    67
P780  blue   black    45

df2:

ID  Label1   Label2  cat
P903  chyt    dd      0
P560  bk3     green    0
P780  blue2   black2   0 
P880  blue4   black    0
P203  blue9   black1   0

我想要一个类似的结果

ID  Label1   Label2   cat
P903  chyt    dd      0
P560  bk3     green    67
P780  blue2   black2   45 
P880  blue4   black    0
P203  blue9   black1   34

df2是一个新的数据框,是df1的更新版本,因此唯一保持等于df1的列为“ ID”,其他列则使用不同的标签/单词进行了更新。但是,df1有一个手动添加的额外列。我想检索该信息并使用ID列作为键复制到df2中,但df2必须维护其列。

我尝试了.merge,但是它重复了列,或者省略了行。

1 个答案:

答案 0 :(得分:0)

使用pd.DataFrame.merge 如果ID不是index

>>> df2.merge(df1.loc[:,['ID','Cat']], on='ID', how='left').fillna(0)
     ID Label1  Label2  cat   Cat
0  P903   chyt      dd    0   0.0
1  P560    bk3   green    0  67.0
2  P780  blue2  black2    0  45.0
3  P880  blue4   black    0   0.0
4  P203  blue9  black1    0  34.0

或者如果两个数据帧中的IDindex
pd.DataFrame.join

>>> df2.join(df1['Cat']).fillna(0)
     Label1  Label2  cat   Cat
ID
P903   chyt      dd    0   0.0
P560    bk3   green    0  67.0
P780  blue2  black2    0  45.0
P880  blue4   black    0   0.0
P203  blue9  black1    0  34.0

pd.DataFrame.merge

>>> df2.merge(df1['Cat'], on='ID', how='left').fillna(0)
     Label1  Label2  cat   Cat
ID
P903   chyt      dd    0   0.0
P560    bk3   green    0  67.0
P780  blue2  black2    0  45.0
P880  blue4   black    0   0.0
P203  blue9  black1    0  34.0