Pandas DF - заменить значения в в ячейке на значение из словаря

Рейтинг: 0Ответов: 1Опубликовано: 20.02.2023

Прошу помощи

Имеется 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