pandas 中最近的邻居匹配 [英] Nearest neighbor matching in Pandas

查看:68
本文介绍了 pandas 中最近的邻居匹配的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

给定两个DataFrames(t1,t2),它们都具有"x"列,我将如何将ID为t2的列附加到t1上,其"x"值最接近t1中的"x"值?

t1:
id  x
1   1.49
2   2.35

t2:
id  x
3   2.36
4   1.5

output:
id  id2
1   4
2   3

我可以通过创建一个新的DataFrame并在t1.groupby()上进行迭代并在t2上进行查找然后合并来完成此操作,但是在给定1700万行t1 DataFrame的情况下,这花费了非常长的时间.

是否有更好的方法来完成?我已经搜索了有关groupby,apply,transform,agg等的pandas文档.但是尽管我认为这将是一个普遍的问题,但是仍然没有一种优雅的解决方案.

解决方案

使用 解决方案

Using merge_asof

df = pd.merge_asof(df1.sort_values('x'),
                   df2.sort_values('x'),
                   on='x', 
                   direction='nearest', 
                   suffixes=['', '_2'])

print(df)
Out[975]: 
   id     x  id_2
0   3  0.87     6
1   1  1.49     5
2   2  2.35     4


Method 2 reindex

df1['id2']=df2.set_index('x').reindex(df1.x,method='nearest').values
df1
   id     x  id2
0   1  1.49    4
1   2  2.35    3

这篇关于 pandas 中最近的邻居匹配的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆