Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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)
like image 626
sci9 Avatar asked Dec 18 '25 02:12

sci9


2 Answers

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())]
like image 147
BENY Avatar answered Dec 20 '25 14:12

BENY


Use merge and query:

out = pd.merge(table_1, table_2, how='cross') \
        .query("(f1 >= f1001) & ((f1 < f1002) | f1002.isna())")
like image 42
Corralien Avatar answered Dec 20 '25 15:12

Corralien



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!