您如何内部合并具有容差值的两个数据帧? [英] How do you inner merge two dataframes with a tolerance value?
本文介绍了您如何内部合并具有容差值的两个数据帧?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有两个数据框:
df1<- A C
7.629 1
5.227 2
5.472 3
5.386 4
5.445 5
A B
df2<- 7.634 10.0
7.732 30.0
5.223 33.0
5.479 22.0
5.390 49.0
5.439 53.0
我想对 A 列执行内部合并,容差值为 ±0.01 以获得结果数据名:
I'd like to perform an inner merge on column A with a tolerance value of ±0.01 to get the resulting datafame:
df3<- A B C
7.634 10.0 1
5.223 33.0 2
5.479 22.0 3
5.390 49.0 4
5.439 53.0 5
这可以吗?
(注意 df3 的 A 列有从 df2 复制的值)
(note that column A of df3 has values copied from df2)
推荐答案
merge_asof
似乎解决了你的问题(推荐第二个方法,我从零学到的~)
merge_asof
seems solve your problem (Recommend 2nd method , I learn it from Zero~)
pd.merge_asof(df2.sort_values('A'), df1.sort_values('A'), direction='nearest',on='A').sort_values('C').drop_duplicates('C')
Out[415]:
A C B
0 5.227 2 33.0
1 5.386 4 49.0
2 5.445 5 53.0
3 5.472 3 22.0
4 7.629 1 10.0
或者使用IntervalIndex
df2.index = pd.IntervalIndex.from_arrays(df2['A']-0.01,df2['A']+0.01,closed='both')
df1['B']=df2.loc[df1.A].B.values
df1['A']=df2.loc[df1.A].A.values
df1
Out[450]:
A C B
[7.619, 7.639] 7.634 1 10.0
[5.217, 5.237] 5.223 2 33.0
[5.462, 5.482] 5.479 3 22.0
[5.376, 5.396] 5.390 4 49.0
[5.435, 5.455] 5.439 5 53.0
这篇关于您如何内部合并具有容差值的两个数据帧?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文