У меня есть 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
df['ball_faced'] = df.extra_type.apply(lambda x: x != 'wides').astype(int)
Обратите внимание, что нет необходимости использовать 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 раз быстрее.