Проблема в том, что при вызове np.where
сначала оцениваются все его параметры, а затем определяется результат в зависимости от условия. Таким образом, словарь запрашивается также для 'b'
и 'c'
, даже если эти значения будут отброшены позже. Наверное, самое простое решение:
import pandas as pd
import numpy as np
test = pd.DataFrame({'col1': ['a', 'a', 'b', 'c'], 'col2': [1, 2, 3, 4]})
dict_curr = {'a': 2}
test['col2'] = np.where(test.col1 == 'a', test.col1.map(lambda x: dict_curr.get(x, 0)), test.col2)
Это даст значение 0
для ключей, отсутствующих в словаре, но, поскольку оно будет отброшено позже, не имеет значения, какое значение вы используете.
Другой простой способ получить тот же результат:
import pandas as pd
test = pd.DataFrame({'col1': ['a', 'a', 'b', 'c'], 'col2': [1, 2, 3, 4]})
dict_curr = {'a': 2}
test['col2'] = test.apply(lambda x: dict_curr.get(x.col1, x.col2), axis=1)