Создайте новый столбец на основе другого столбца в фрейме данных

У меня есть df с несколькими столбцами. Один из моих столбцов — extra_type. Теперь я хочу создать новый столбец на основе значений столбца extra_type. Например

extra_type
NaN
legbyes
wides
byes

Теперь я хочу создать новый столбец с 1 и 0, если extra_type не равен ширине, тогда 1 иначе 0 я пробовал вот так

df1['ball_faced'] = df1[df1['extra_type'].apply(lambda x: 1 if [df1['extra_type']!= 'wides'] else 0)]

Это не работает таким образом. Любая помощь в том, как сделать эту работу, приветствуется. ожидаемый результат, как показано ниже

extra_type  ball_faced
NaN           1
legbyes       1
wides         0
byes          1
1
0
183
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий
 df['ball_faced'] = df.extra_type.apply(lambda x: x != 'wides').astype(int)
дополнительный_тип ball_faced 0 NaN 1 1 прощай 1 2 широкий 0 3 пока 1

Обратите внимание, что нет необходимости использовать apply() или лямбда, как в исходном вопросе, поскольку сравнение серии pandas и строкового значения можно выполнить векторизованным способом следующим образом:

df1['ball_faced'] = df1.extra_type.ne('wides').astype(int)

Выход:

  extra_type  ball_faced
0        NaN           1
1    legbyes           1
2      wides           0
3       byes           1

Вот ссылки на документы для ne() и astype().

Для некоторых полезных идей о том, когда использовать apply (а когда нет), см. этот ТАК вопрос и ответы на него . TL; DR из принятого ответа: «Если вы не уверены, следует ли вам использовать приложение, вы, вероятно, не должны».

Я проверил обе реализации с 4k строками: 0,03849387168884277 секунд против 0,0052607059478759766 секунд. ОП хотел выяснить метод .apply(), но ваше решение в 10 раз быстрее.

Sergey Sakharovskiy 23.12.2022 01:15

Другие вопросы по теме