首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于最近值的熊猫数据合并

基于最近值的熊猫数据合并
EN

Stack Overflow用户
提问于 2017-04-19 09:14:28
回答 1查看 2.9K关注 0票数 5

我有两个数据处理程序,比如AB,它们有一些列名为attr1attr2attrN

我有一个特定的距离度量,我想要合并数据格式,这样A中的每一行都与B中的行合并,该行在属性之间的距离最短。注意,合并时可以重复B中的行。

例如(使用一个属性来保持简单),使用绝对差距离|A.attr1 - B.att1|合并这两个表

代码语言:javascript
复制
A | attr1      B | attr1
0 | 10         0 | 15
1 | 20         1 | 27
2 | 30         2 | 80

应该产生以下合并表

代码语言:javascript
复制
M | attr1_A  attr1_B
0 | 10       15
1 | 20       15
2 | 30       27

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

我如何才能执行上述合并使用熊猫?这里有什么方便的方法或功能可以帮助吗?

编辑:为了澄清,在数据中也有其他列,它们不在距离计算中使用,但也必须合并。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-19 10:03:07

可以这样做的一种方法是:

代码语言:javascript
复制
A = pd.DataFrame({'attr1':[10,20,30]})
B = pd.DataFrame({'attr1':[15,15,27]})

使用交叉连接获取所有组合

1.2+大熊猫的更新使用方式=‘交叉’

代码语言:javascript
复制
merge_AB = A.merge(B, how='cross', suffixes = ('_A', '_B'))

老熊猫版本使用psuedo键..。

代码语言:javascript
复制
A = A.assign(key=1)
B = B.assign(key=1)

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

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

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
   attr1_A  attr1_B
0       10       15
3       20       15
8       30       27
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43491342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档