Pandas 中的最近邻匹配

rob*_*pes 5 python pandas

给定两个 DataFrame(t1,t2),都具有列“x”,我如何将具有 t2 ID 的列附加到 t1,其中 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
Run Code Online (Sandbox Code Playgroud)

我可以通过创建一个新的 DataFrame 并迭代 t1.groupby() 并在 t2 上查找然后合并来完成此操作,但是对于 1700 万行的 t1 DataFrame,这需要非常长的时间。

有没有更好的方法来实现?我已经搜索了有关 groupby、apply、transform、agg 等的 pandas 文档。尽管我认为这将是一个常见问题,但一个优雅的解决方案尚未出现。

WeN*_*Ben 5

使用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
Run Code Online (Sandbox Code Playgroud)

方法二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
Run Code Online (Sandbox Code Playgroud)