<pre><code># Prepare test data
dct = {'Col A': {0: 'AGHXXXJ002',
1: 'AGHGHJJ002',
2: 'ABCRTGHP001',
3: 'ABCDFFP01',
4: 'ABCXGHJD09'},
'Col B': {0: 'XXX', 1: 'GHJ', 2: 'RTGH', 3: 'DFF', 4: 'XGH'}}
df = pd.DataFrame.from_dict(dct)
tmp_lst = [x[0].split(x[1]) for x in zip(df['Col A'],df['Col B'])] # prepare temporary list with items: 'AGHXXXJ002'.split('XXX') -> [['AGH','J002'],.....]
df['Preceding Chars'] = [c[0] for c in tmp_lst] # get first element ['AGH','J002'][0] -> 'AGH'
df['Following Chars'] = [c[1] for c in tmp_lst] # get second element ['AGH','J002'][1] -> 'J002'
df['Position'] = [[len(i[0]), len(i[0])+ len(i[1])-1] for i in zip(df['Preceding Chars'], df['Col B'])]
df
Out[1]:
Col A Col B Preceding Chars Following Chars Position
0 AGHXXXJ002 XXX AGH J002 [3, 5]
1 AGHGHJJ002 GHJ AGH J002 [3, 5]
2 ABCRTGHP001 RTGH ABC P001 [3, 6]
3 ABCDFFP01 DFF ABC P01 [3, 5]
4 ABCXGHJD09 XGH ABC JD09 [3, 5]
</code></pre>