您如何内部合并具有容差值的两个数据帧? [英] How do you inner merge two dataframes with a tolerance value?

查看:45
本文介绍了您如何内部合并具有容差值的两个数据帧?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个数据框:

 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屋!

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