pandas 中最近的邻居匹配 [英] Nearest neighbor matching in Pandas
本文介绍了 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屋!
查看全文