#pandas #lambda #apply
Вопрос:
В приведенном ниже коде я пытаюсь создать новую переменную var1, которая идентична новой переменной var2, за исключением того, что она равна нулю, если var1 больше 2021/1/1.
df_jan['var2'] = df_jan['var1'].apply(lambda x: np.nan if x['var1']>pd.Timestamp(2021,1,20))
Я просто получаю ответ «синтаксическая ошибка». Что я делаю не так?
Комментарии:
1. Эй! Обновленный ответ(исправлена опечатка)… Пожалуйста, взгляните 🙂
Ответ №1:
вы также должны использовать else
оператор, если вы используете if
оператор внутри apply()
метода:
так что попробуй:
df_jan['var2'] = df_jan['var1'].apply(lambda x: np.nan if x>pd.Timestamp(2021,1,20) else x)
кстати apply()
, под капотом есть петля, поэтому для повышения производительности вы можете использовать:
Series.mask()
метод:
df_jan['var2']=df_jan['var1'].mask(df_jan['var1']>pd.Timestamp(2021,1,20))
или
Series.where()
метод:
df_jan['var2']=df_jan['var1'].where(~(df_jan['var1']>pd.Timestamp(2021,1,20)))