如何根据日期比较使 pandas 变量为空
how to null pandas variable based on date comparison
在下面的代码中,我试图创建一个新变量 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))
我刚收到“语法错误”响应。我做错了什么?
如果在 apply()
方法中使用 if
语句,则还必须使用 else
语句:
所以尝试:
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)))
在下面的代码中,我试图创建一个新变量 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))
我刚收到“语法错误”响应。我做错了什么?
如果在 apply()
方法中使用 if
语句,则还必须使用 else
语句:
所以尝试:
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)))