Pandas merge() по условию

Подскажите, пожалуйста, как можно сделать merge() двух таблиц данных по условию: если в df1 в колонке ['Магазин'] встречается "Ашан", то чтобы тянул по одному ключу из df2, если не встречается "Ашан", то чтобы тянул по другому ключу из df2?

Делаю вот так, но возникает ошибка ValueError: The truth value of a Series is ambiguous:

if df['Магазин'] == 'Ашан':
    df_merged = pd.merge(df, df2, on=['KeyValueId'], how='left')
else:
    df_merged = pd.merge(df, df2, on=['KeyValueId2'], how='left')

Ответы (1 шт):

Автор решения: CrazyElf

Ну, наверное, смержить по отдельности где Ашан и где не Ашан и потом объединить:

# делаем битовую маску по Ашану
ashan = df['Магазин'] == 'Ашан'

# мержим Ашан
df_ashan = pd.merge(df[ashan], df2, on=['KeyValueId'], how='left')

# мержим остальное
df_not_ashan = pd.merge(df[~ashan], df2, on=['KeyValueId2'], how='left')

# склеиваем результаты
df_merged = pd.concat([df_ashan, df_not_ashan])

Вообще в Pandas нужно привыкать к "векторному" подходу - работать сразу с наборами данных, фильтровать их по маске оптом и т.п.

→ Ссылка