Вы можете merge
и использовать filter
один второй фрейм данных, чтобы сохранить интересующие столбцы:
df1.merge(df2.filter(regex=r'^id$|test'), on='id')
Или аналогичным образом с помощью побитовых операций :
df1.merge(df2.loc[:,(df2.columns=='id')|df2.columns.str.contains('test')], on='id')
df1 = pd.DataFrame(columns=['id','a','b'])
df2 = pd.DataFrame(columns=['id','ab','cd','ab_test','mn_test'])
df1.merge(df2.filter(regex=r'^id$|test'), on='id').columns
# Index(['a', 'b', 'id', 'ab_test', 'mn_test'], dtype='object')