Условно присваивать значение для выбора значений в переменной

#python #pandas

#python #pandas

Вопрос:

У меня есть фрейм данных с переменной с именем STAFF . Для определенных сотрудников я хочу создать новую переменную и присвоить этой переменной значение (28) для конкретных сотрудников. Затем назначьте другое значение (14) для поставщиков, которые не входят в начальную группу поставщиков, которым я хочу присвоить значение 28. И те, которые не находятся ни в одном списке, равны 0.

У меня есть некоторый общий код, но мне было любопытно, как я могу отредактировать его, чтобы он включал только определенный персонал / не должен писать отдельные строки кода для каждого персонала.

 MASTER.loc[MASTER['STAFF'] == 'Manuel V.', 'PG_Hours'] = 28.8 
MASTER.loc[MASTER['STAFF'] == 'Dana M.', 'PG_Hours'] = 28.8 
MASTER.loc[MASTER['STAFF'] == 'Suzanne B.', 'PG_Hours'] = 28.8 
MASTER.loc[MASTER['STAFF'] == 'Tim G.', 'PG_Hours'] = 14
MASTER.loc[MASTER['STAFF'] =! '????', 'PG_Hours'] = 0

STAFF      PG_Hours 
Manuel V.     28
Tim G.        14
Dana M.       28
Suzanne B.    28
Chi N.        0
Missy S.      0
  

Ответ №1:

Вы можете использовать np.select для присвоения нескольких значений на основе нескольких условий и .isin для нескольких имен в одном из условий:

 MASTER['PG_Hours'] =  np.select([MASTER['STAFF'].isin(['Manuel V.', 'Dana M.', 'Suzanne B.']),
                                 MASTER['STAFF'] == 'Tim G.'], 
                                 [28.8, 14], 0)
  

28.8 и 14 являются двумя результатами из двух условий, а ноль — альтернативный результат. Если у вас есть больше условий, вы можете соответствующим образом настроить их, перечислив условия по порядку и результаты по порядку. Порядок списка имеет значение для правильного сопоставления условия с результатом.