根据最近的值合并熊猫数据框

阿基罗斯

我有两个dataframes,说AB,有一些被命名的栏目attr1attr2attrN

我有一个确定的距离度量,并且我想合并数据帧,以使其中的每一行AB属性之间距离最短的行合并请注意,B合并时可以重复输入。

例如(使用一个属性可以使事情简单),使用绝对差值距离合并这两个表 |A.attr1 - B.att1|

A | attr1      B | attr1
0 | 10         0 | 15
1 | 20         1 | 27
2 | 30         2 | 80

应该产生以下合并表

M | attr1_A  attr1_B
0 | 10       15
1 | 20       15
2 | 30       27

我目前的处理方式很慢,它基于比较的每一行A和的每一行B,但是代码也不清楚,因为我必须保留合并索引,但我一点也不满意,但是我无法提出更好的解决方案。

如何使用熊猫执行上述合并?是否有任何方便的方法或功能在这里会有所帮助?

编辑:只是为了澄清,在数据帧中还有距离计算中未使用的其他列,但也必须合并。

斯科特·波士顿

一种方法如下:

A = pd.DataFrame({'attr1':[10,20,30]})
B = pd.DataFrame({'attr1':[15,15,27]})

创建交叉键的合并键以获取所有组合

A = A.assign(key=1)
B = B.assign(key=1)

merged_AB =pd.merge(A,B, on='key',suffixes=('_A','_B'))

现在让我们在merged_AB中找到最小距离

M = merged_AB.groupby('attr1_A').apply(lambda x:abs(x['attr1_A']-x['attr1_B'])==abs(x['attr1_A']-x['attr1_B']).min())

merged_AB[M.values].drop_duplicates().drop('key',axis=1)

输出:

   attr1_A  attr1_B
0       10       15
3       20       15
8       30       27

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章