从两个字段交叉引用列。如果找到匹配项,则从一个数据框向另一个数据框填充信息

2024-04-24 08:29:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图交叉引用一个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'和其他命令。我好像搞不懂这个。如有任何建议,将不胜感激


Tags: 命令目标dfaddress地址nan交叉建议
1条回答
网友
1楼 · 发布于 2024-04-24 08:29:15

如果你同意邮政编码的dtype=object

>>> 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\u index('Address')。PostCode是一个索引序列。如果你有一个地址到邮政编码的字典,你也可以得到同样的效果

相关问题 更多 >