所以我一直在搜索与这个SQL查询等价的pandas
SELECT * FROM table1
LEFT JOIN table2
ON table1.columnX>=table2.columnY
*请注意,我是通过不等式条件>=
连接的,而不是通过匹配列。
但似乎Pandas的合并只能通过精确匹配来加入(如select * from table1 LEFT JOIN table2 ON table1.columnX=table2.columnY
)
它似乎不支持通过更复杂的条件进行连接,比如一列的值大于另一列。支持哪种SQL
我发现很多资源都说它不支持这一点,唯一的方法是先做一个cartersian产品,然后过滤得到的 Dataframe 。或者在加入之前预过滤 Dataframe 。然而,笛卡尔积是昂贵的
但我找到的这些来源是5年前的。panda的merge只能通过精确匹配列来连接,并且不允许不等式(<,>,<=,>=,between),这在今天仍然是一样的吗?
以下是我在这方面找到的一些旧资源:
Inequality joins in Pandas?
Merge pandas dataframes where one value is between two others
在pandas中按范围连接/合并的最佳方式
2条答案
按热度按时间cbwuti441#
conditional_join有效地覆盖了不等式连接(在引擎盖下,它使用二进制搜索)
范围连接也可以有效地实现,如果你安装了numba,你可以得到加速:
如果你只是寻找第一个匹配,其中columnX >= columnY,那么
pd.merge_asof
也可以很好地覆盖你:注意,对于
pd.merge_asof
,连接列应该排序; conditional_join在引擎盖下处理这个问题。vh0rcniy2#
在Pandas中,merge函数主要用于基于列之间的精确匹配进行组合。
您可以使用此代码作为示例: