Сначала извлекаем по столбцу df1['Brand']
столбцы с regex
, а затем устанавливаем значения по маске с DataFrame.mask
, а пропущенные значения по DataFrame.where
:
v = df.columns.str.extract('(' + '|'.join(df1['Brand']) + ')', expand=False)
print (v)
Index(['Audi', 'BMW', 'VW'], dtype='object')
m = df.eq('Selected')
print (m)
Q14r63: Audi Q14r2: BMW Q14r1: VW
0 True False False
1 False True True
2 True True False
df = df.mask(m, v[None, :]).where(m)
print (df)
Q14r63: Audi Q14r2: BMW Q14r1: VW
0 Audi NaN NaN
1 NaN BMW VW
2 Audi BMW NaN
Альтернативное решение с конструктором numpy.where
и DataFrame
:
df = pd.DataFrame(np.where(m, v, np.nan), index=df.index, columns=df.columns)
print (df)
Q14r63: Audi Q14r2: BMW Q14r1: VW
0 Audi NaN NaN
1 NaN BMW VW
2 Audi BMW NaN