为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

交互式爱情 2021-12-21 10:47:13
数据框 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)')


查看完整回答
反对 回复 2021-12-21
?
当年话下

TA贡献1890条经验 获得超9个赞

如果您的数据已经排序,如果您实施某种二分搜索来查找对数据进行分区的位置(假设合并过程不会花费超过 O(log n) n) 以及)。

如果你的数据没有排序,你能做的最好的事情是 O(n),在你发现合并候选者的同时合并。


查看完整回答
反对 回复 2021-12-21
  • 2 回答
  • 0 关注
  • 131 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信