I have two tables A and B which I need to join via regular expresion:
import pandas as pd
import numpy as np
a_df = pd.DataFrame({'key': ['A','B','C','D','E','F'],
'cola1': ['c1A','c1B', 'c1C', 'c1D', 'c1E', 'c1F'],
'cola2': ['c2A','c2B', 'c2C', 'c2D', 'c2E', 'c2F']})
b_df = pd.DataFrame({'key': ['A|B|C','E|F'],
'colb1': ['cb1ABC','cb1EF'],
'colb2': ['cb2ABC','c2EF']})
The resulting dataframe should look like this:
a_b_merge = pd.DataFrame({'key_a': ['A','B','C','D','E','F'],
'cola1': ['c1A','c1B', 'c1C', 'c1D', 'c1E', 'c1F'],
'cola2': ['c2A','c2B', 'c2C', 'c2D', 'c2E', 'c2F'],
'key_b': ['A|B|C', 'A|B|C', 'A|B|C', np.nan, 'E|F', 'E|F'],
'colb1': ['cb1ABC','cb1ABC', 'cb1ABC', np.nan, 'c1E', 'c1F'],
'colb2': ['cb2ABC','cb2ABC', 'cb2ABC', np.nan, 'c2EF', 'c2EF']})
My solution in SQL would be something like this:
SELECT * FROM table_a a
LEFT JOIN table_b b
ON b.key LIKE CONCAT('%', a.key, '%')
Is there any way to achieve this using pandas merge()? If not, which would be the most elegant solution ?