从数据Pandas中查找值



我有一个df中的邮政编码坐标列表

print(df)
out[0]:
X                      Y           Postcode
84060.2933273726    452334.434562507      2543
842443.2065506417   452310.49440726795    2544
78129.7656972764    450394.36304550205    2542
76143.40136149981   452922.516876715      2551

我还有一个活动文件(df2(,坐标未知,由NaN表示。

print(df2)
out[1]:
OrigLoc DestLoc O_X               O_Y             D_X           D_Y
0   2515    2515    82190.12097       454778.5460     81694.8038    454266.4303
1   2515    2544    81203.80496       453952.5966     NaN           NaN
2   2544    2515    NaN               NaN             81759.58454   454494.4784
3   2515    2543    81573.1442        454424.602      NaN           NaN

如何通过从df中获取X和Y坐标的数据来填充O_X、O_Y、D_X和D_Y中的NaN?我尝试过使用pd.merge,但由于我想为多列查找值,这是否意味着我必须执行pd.mergo 4次?有没有更有效的方法可以做到这一点?感谢您的帮助!

合并将获得原点或目的地的坐标,因此两次合并就足够了:

>>> orig = df2.reset_index().merge(df, left_on='OrigLoc', right_on='Postcode')
...           .set_index('index')[['X', 'Y']].add_prefix('O_')
>>> orig
O_X            O_Y
index                              
2      842443.206551  452310.494407
>>> dest = df2.reset_index().merge(df, left_on='DestLoc', right_on='Postcode')
...           .set_index('index')[['X', 'Y']].add_prefix('D_')
>>> dest
D_X            D_Y
index                              
1      842443.206551  452310.494407
3       84060.293327  452334.434563

请注意,这些origdest数据帧的列名与您在df中的坐标相同:O_XO_YD_XD_Y。您还应该注意允许保留原始索引的reset_indexset_index步骤−merge通常会擦除该列。所有这些都允许我们保留这些值应该填充df2中哪些单元格的信息。

我们现在可以简单地使用fillna来填补df:中的空白

>>> df2.fillna(dest).fillna(orig)
OrigLoc  DestLoc            O_X            O_Y            D_X            D_Y
0     2515     2515   82190.120970  454778.546000   81694.803800  454266.430300
1     2515     2544   81203.804960  453952.596600  842443.206551  452310.494407
2     2544     2515  842443.206551  452310.494407   81759.584540  454494.478400
3     2515     2543   81573.144200  454424.602000   84060.293327  452334.434563

相关内容

  • 没有找到相关文章