数据框A:
pd.Dataframe({
'price': [50, 150, 250],
'group':[2, 5, 10]
})
数据框B:
pd.Dataframe({
'low_price': [0, 100, 200],
'high_price': [99, 199, 299],
'low_group':[0, 4, 8],
'high_group':[3, 6, 12],
'something':['A', 'B', 'C']
})
如何在以下条件下合并这些数据框:
-数据框B的价格介于之间。
AND
-数据框A的组在数据框B的低组和高组之间。
有没有一种方法可以做到不重复并逐行检查?我已经这样做了,它的成本为O(n ^ 2),不可伸缩。
编辑:
PS1:A中的每一行在B中具有0或1个匹配项。我正在寻找“内部”合并。
PS2:A有数百万条记录,B有数百条记录。
答案 0 :(得分:0)
如果已经对数据进行了排序,那么如果实现某种二进制搜索以查找将数据分区的位置,则可以将其降至O(log n)(假设合并过程所花的时间不超过O(log n))。
如果未对数据进行排序,则最好的办法是O(n),并在发现合并候选者的同时进行合并。
答案 1 :(得分:0)
对于同时进行价格和分组,您不容易做到这一点,但是merge_asof
可以一次通过A来加入A对应于每行B的低价格。然后,使用loc
查询选择项只会使行满足其他条件。
pd.merge_asof(A, B, left_on='price', right_on='low_price').query(
'(price<=high_price)&(group>=low_group)&(group<=high_group)')