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

本文是小编为大家收集整理的关于Pandas中的最近邻居匹配的处理方法,想解了Pandas中的最近邻居匹配的问题怎么解决?Pandas中的最近邻居匹配问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

给定两个 DataFrames (t1, t2),都有一个列"x",我如何将一个列附加到 t1,其 ID 为 t2,其"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 文档.但是尽管我认为这将是一个常见问题,但尚未出现一个优雅的解决方案.

推荐答案

使用 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
<小时>

方法二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

本文地址:https://www.itbaoku.cn/post/1728096.html