如何不按值而是按值范围合并两个数据帧?

数据框 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']

})

如何在以下条件下合并这些数据帧:

-数据帧A 的价格介于数据帧 B 的低价和高价之间。

AND

- 数据帧 A 的组位于数据帧 B 的低组和高组之间。


有没有办法在不遍历行并逐行检查的情况下做到这一点?我已经这样做了,它的成本是 O(n^2),不可扩展。


编辑:


PS1:A 中的每一行在 B 中都有 0 或 1 个匹配项。我正在寻找“内部”合并。


PS2:A有数百万条记录,B有数百条记录。


交互式爱情
浏览 132回答 2
2回答

哔哔one

您不能轻松地同时为价格和组执行此操作,但merge_asof可以在一次通过中为 A 中的每一行加入 B 的相关 low_price。然后选择的查询loc只会保留满足其他条件的行。pd.merge_asof(A, B, left_on='price', right_on='low_price').query(&nbsp; &nbsp; '(price<=high_price)&(group>=low_group)&(group<=high_group)')

当年话下

如果您的数据已经排序,如果您实施某种二分搜索来查找对数据进行分区的位置(假设合并过程不会花费超过 O(log n) n) 以及)。如果你的数据没有排序,你能做的最好的事情是 O(n),在你发现合并候选者的同时合并。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python