你如何内部合并两个数据框与容差值?
问题描述:
我有两个dataframes:你如何内部合并两个数据框与容差值?
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
我想用±0.01的公差值执行上A列内合并,以获得所产生的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复制值)
答
merge_asof
似乎解决你的问题(建议第2种方法,我学会了从零〜)
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
如果我的解决方案在你更新熊猫后有效,你可以接受它:) – Wen
嗨温,我仍然无法让它工作,对不起:/ ...当使用“loc”时,出现错误“值的长度与索引的长度不匹配”... – Neko
我使用示例中的一组不同的数据(这是为了简化)其中df2有72行,所以可以有多个列B的值与df1的列A中的5个值相关联...此外,我的错误值更像是+/- 0.003,因此我无法使用第一个解决方案(我再次使用了±0.01)D: – Neko