Search code examples
pythonsqlpandasdataframecross-join

Pandas: cross join with multiple conditions


Consider the following query:

SELECT *
    FROM
      table_1
    CROSS JOIN
      table_2
    WHERE
      table_1.f1 >= table_2.f1001 
      AND (
        table_1.f1 < table_2.f1002
        OR table_2.f1002 IS NULL
      )

Is it possible to implement this using Pandas, for example with pd.merge(how='cross')? Suppose we have two dataframes table_1 and table_1, and we need to do a cross join according to the conditions below:

table_1.f1 >= table_2.f1001 AND (table_1.f1 < table_2.f1002 OR table_2.f1002 IS NULL)

Solution

  • You can do like

    out = pd.merge(table_1, table_2,how='cross')
    out = out[out['f1'].ge(out['f1001']) & (out['f1'].lt(out['f1001']) | table_2['f1002'].isna())]