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 нужно привыкать к "векторному" подходу - работать сразу с наборами данных, фильтровать их по маске оптом и т.п.