как обнулить переменную pandas на основе сравнения дат

#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)))