我经常使用熊猫进行合并(连接),使用范围条件。以大熊猫的范围加入/合并的最佳方式
例如,如果有2个dataframes:
甲(A_ID,A_value)
乙(B_ID,B_low,B_high,B_name)
其是大和大约的相同的尺寸(比方说每个2M记录)。
我想在A和B之间进行内连接,所以A_value将在B_low和B_high之间。
使用SQL语法,这将是:
SELECT *
FROM A,B
WHERE A_value between B_low and B_high
,这将是很容易,短,效率高。
与此同时,在熊猫中,唯一的方法是(不使用我找到的循环),通过在两个表中创建一个虚拟列,加入它(等同于交叉连接),然后过滤掉不需要的行。这听起来很沉重和复杂:
A['dummy'] = 1
B['dummy'] = 1
Temp = pd.merge(A,B,on='dummy')
Result = Temp[Temp.A_value.between(Temp.B_low,Temp.B_high)]
另一种解决方案,我必须是通过使用B[(x>=B.B_low) & (x<=B.B_high)]
掩膜应用上的每个值在B中的搜索功能,但它听起来效率低下以及和可能需要的索引优化。
是否有更优雅和/或有效的方式来执行此操作?
[This Q&A](https://stackoverflow.com/questions/15581829/how-to-perform-an-inner-or-outer-join-of-dataframes-with-pandas-on-non-simplisti)可能是相关的。 –
看起来像他们使用类似的方法,我建议我自己(虚拟列,笛卡尔产品和面具过滤器)。令人惊讶的是没有内置的解决方案。 – Dimgold
您是否也看过接受的答案...?不要从Stack Overflow的_questions_中学习。虽然这可能是因为我没有意识到答案是一样的,在这种情况下对不起:) –