df1 = pd.DataFrame({'val1': ['B2', 'A1', 'B2', 'A1', 'B2', 'A1']})
df2 = pd.DataFrame({'val1': ['A1', 'A1', 'A1', 'B2', 'B2', 'B2'], 'val2': [
    10, 13, 16, 11, 20, 22]})
df_final = pd.DataFrame({'val1': ['B2', 'A1', 'B2', 'A1', 'B2', 'A1'],
    'val2': [11, 10, 20, 13, 22, 16]})
df1['cumcount'] = df1.groupby('val1').cumcount()
df2['cumcount'] = df2.groupby('val1').cumcount()
result = pd.merge(df1, df2, how='left')
result = result.drop('cumcount', axis=1)
print(result)
assert result.equals(df_final)
Python Pandas — объединение двух фреймов данных на основе порядка индекса