Одним из способов является работа с круглыми скобками и создание новой строки с помощью pandas .DataFrame.explode :
df1 = pd.DataFrame({'PointA':['A','A','B','C'],
'LineA': [2,3,2,3],
'LineB': ['D', 'K', 'F', 'M']})
df2 = pd.DataFrame({'PointA':['A','A','A','A','A','B'],
'LineA': [2, '2(3)', 2, 3,3, 2],
'ID': [129, 233, 560, 321, 340, 213]})
df1['LineA'] = df1['LineA'].astype(str)
df2['LineA'] = df2['LineA'].astype(str)
df2['LineA'] = df2['LineA'].str.replace(')', '').str.split(r'(')
df2 = df2.explode('LineA')
pd.merge(df1, df2, on=['PointA', 'LineA'], how='outer')
PointA LineA LineB ID
0 A 2 D 129.0
1 A 2 D 233.0
2 A 2 D 560.0
3 A 3 K 233.0
4 A 3 K 321.0
5 A 3 K 340.0
6 B 2 F 213.0
7 C 3 M NaN