数据框 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有数百条记录。
2 回答
哔哔one
TA贡献1854条经验 获得超8个赞
您不能轻松地同时为价格和组执行此操作,但merge_asof可以在一次通过中为 A 中的每一行加入 B 的相关 low_price。然后选择的查询loc只会保留满足其他条件的行。
pd.merge_asof(A, B, left_on='price', right_on='low_price').query(
'(price<=high_price)&(group>=low_group)&(group<=high_group)')
当年话下
TA贡献1890条经验 获得超9个赞
如果您的数据已经排序,如果您实施某种二分搜索来查找对数据进行分区的位置(假设合并过程不会花费超过 O(log n) n) 以及)。
如果你的数据没有排序,你能做的最好的事情是 O(n),在你发现合并候选者的同时合并。
添加回答
举报
0/150
提交
取消