Pandas DF - заменить значения в в ячейке на значение из словаря
Прошу помощи
Имеется DataFrame в котором есть столбец, где могут встречаться значения как одиночные так и список.
37774 186-2, 185-3, 185-2
37850 358-1, 358-4
37927
38266 111-2
38409 111-2
38508
38519 185-1
41161 185-4, 357-1
42948 185-1
Name: ARTICLE, dtype: object
Имеется словарь
aDict = {'185-1': 'some text 1', '186-2': 'some text 2', '185-4': 'some text 3', '186-2': 'some text 5', '309-1': 'some text 4', '366-2': 'some text 11'}
Необходимо заменить значение в ячейке на значение из словаря. И оставить без изменения, которых в словаре нетю
Пробовал вариант:
df['ARTICLE'] = df['ARTICLE'].map(aDict)
Работает только для одиночных значения.
Если в ячейке список - не работает
Ответы (1 шт):
Автор решения: Алексей Р
→ Ссылка
Разрезаем каждую строку по запятым, получившиеся списки "эксплодим", меняем значения с помощью .replace(), далее группируем по индексу и объединяем через запятые.
aDict = {'185-1': 'some text 1', '186-2': 'some text 2', '185-3': 'some text 3', '186-5': 'some text 5', '309-1': 'some text 4', '366-2': 'some text 11'}
df = pd.DataFrame({'ARTICLE': ['186-2, 185-3, 185-2', '358-1, 358-4', '', '111-2', '111-2', '', '185-1', '185-4, 357-1', '185-1']})
df.ARTICLE = df.ARTICLE.str.split(', ').explode().replace(aDict).groupby(level=0).agg(', '.join)
print(df)
ARTICLE
0 some text 2, some text 3, 185-2
1 358-1, 358-4
2
3 111-2
4 111-2
5
6 some text 1
7 185-4, 357-1
8 some text 1