Изменение значений pandas данных на основе словаря с помощью сопоставления или маски - PullRequest
1 голос
/ 22 марта 2020

Есть ли способ заменить значение, используя словарь или отображение? У меня есть такой фрейм данных: df

Q14r63: Audi                 Q14r2: BMW                 Q14r1: VW 

Selected                     Not Selected               Not Selected
Not Selected                 Selected                   Selected 
Selected                     Selected                   Not Selected 

, и у меня есть другой фрейм данных, который предоставляет коды для брендов. Этот df ofcesese также может быть изменен на словарь. df1

Brand           Code
Audi             63
BMW              2
VW               1

Есть ли способ получить выходные данные, в которых "выбранные" значения в основной df могут быть изменены в зависимости от марки автомобиля?

Желаемый вывод

Q14r63: Audi               Q14r2: BMW                 Q14r1: VW 

Audi                         NaN                       NaN 
NaN                          BMW                       VW 
Audi                         BMW                       NaN

Пока что я попробовал:

v = df.columns.str.extract('(' + '|'.join(df1['Brand']) + ')', expand=False)
m = df.eq('Selected')
df = df.mask(m, v[None, :]).where(m)

но я получаю ошибку ValueError: only one regex group is supported with Index

Для одного кадра данных он работает нормально, но другие подобные данные я получаю вышеупомянутую ошибку

1 Ответ

1 голос
/ 22 марта 2020

Я думаю, что в столбце есть некоторые специальные символы регулярных выражений, поэтому избегайте их:

Это означает изменение:

v = df.columns.str.extract('(' + '|'.join(df1['Brand']) + ')', expand=False)

на:

import re
v = df.columns.str.extract('(' + '|'.join(re.escape(x) for x in df1['Brand']) + ')', expand=False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...