我试图交叉引用一个具有一列地址和邮政编码的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'和其他命令来加入,合并,布尔值。我似乎无法弄清楚这一点。任何意见,将不胜感激。
答案 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是索引系列。如果您拥有地址到邮政编码的字典,您将获得相同的效果。