来自两个熊猫DF的交叉参考列。如果找到匹配项,则从一个DF向另一个DF填充信息

时间:2019-02-08 16:40:59

标签: python pandas

我试图交叉引用一个具有一列地址和邮政编码的DF,与另一个具有地址和一个完全空列的DF来接受邮政编码。如果地址在df1和df2之间匹配,则df2应该接受邮政编码形式df1。

  

df1

   Address         PostCode 

     A              1  

     B              2

     C              3

     D              4
     

df2

   Address         PostCode 

     A       

     R     

     C   

     Z   

我想实现的目标是df2应该是:

  

df2

   Address         PostCode 
     A              1 

     R              NaN

     C              3

     Z              Nan

我对此有点迷茫,我尝试使用'isin'和其他命令来加入,合并,布尔值。我似乎无法弄清楚这一点。任何意见,将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果您对dtype = object的PostCode没问题

>>> df1
  Address  PostCode
0       A         1
1       B         2
2       C         3
3       D         4
>>> df2
  Address PostCode
0       A
1       R
2       C
3       Z
>>> df3 = df2.merge(df1, on='Address', how='left')
>>> df3['PostCode'] = df3.PostCode_y.combine_first(df3.PostCode_x)
>>> df3
  Address PostCode_x  PostCode_y PostCode
0       A                    1.0        1
1       R                    NaN
2       C                    3.0        3
3       Z                    NaN
>>> df3[['Address', 'PostCode']]
  Address PostCode
0       A        1
1       R
2       C        3
3       Z

或者,您可以执行此操作,但是它将更改PostCode使其具有dtype = float64以便处理NaN。您以后总是可以修复数据类型。

>>> df2.Address.map(df1.set_index('Address').PostCode)
0    1.0
1    NaN
2    3.0
3    NaN
Name: Address, dtype: float64

请注意,使用df1.set_index('Address')。PostCode是索引系列。如果您拥有地址到邮政编码的字典,您将获得相同的效果。