Частичное совпадение
Для частичных совпадений ключей словаря в пределах df['Description']
вы можете выполнить итерацию своего словаря вместо вашего фрейма данных:
d = {'IKEA': '9', 'TRANSFER TO SAVINGS': '5', 'Best buy': '8'}
for k, v in d.items():
df.loc[df['Description'].str.contains(k), 'Category'] = v
Предполагая, что у вас есть большое количество строк относительно ключей словаря, это будет значительно более эффективно, чем итерация строк.
Будьте осторожны с порядком словаря. До версии 3.7 словари не следует считать упорядоченными. В CPython v3.6 и v3.7 + словари располагаются по порядку вставки. Вышеуказанная логика обеспечит последний матч стиков.
Точное совпадение
Для точных совпадений вы можете использовать pd.Series.map
, за которым следует fillna
:
d = {'IKEA': '9', 'TRANSFER TO SAVINGS': '5', 'Best buy': '8'}
df['Category'] = df['Description'].map(d).fillna(df['Category'])
Значение fillna
важно, поскольку вы не хотите перезаписывать существующие значения в 'Category'
с помощью NaN
для случаев, когда 'Description'
отсутствует в d
.
Обычно менее эффективная альтернатива, которая позволяет избежать fillna
, возможна через pd.Series.replace
.