我有一个包含时间序列数据的数据框。在一个栏中,我有注册日期,在其他栏中,有取消日期。我想添加一个缺少取消日期的日期,该日期小于特定日期,但最多40周。
我应该如何进行?
如果df['cancel_date']
是NaT
,则添加最大日期。 + 40周。
df['cancel_date'] - df['signup_date']
不应小于0。
答案 0 :(得分:2)
IIUC,您可以将Series.fillna
与pandas.Timedelta
类一起使用。
如果将40周添加到记录signup_date
:
df['cancel_date'] = df['cancel_date'].fillna(df['signup_date'] + pd.Timedelta(40, 'W'))
如果将sign_up
列中的最长日期增加40周:
df['cancel_date'] = df['cancel_date'].fillna(df['signup_date'].max() + pd.Timedelta(40, 'W'))
或者如果使用一些预定义的max date
值,并且约束signup_date < cancel_date
,则在clip
方法上进行链接:
max_date = pd.datetime(2018, 4, 30)
df['cancel_date'] = df['cancel_date'].fillna(max_date + pd.Timedelta(40, 'W')).clip(lower=df.signup_date)
答案 1 :(得分:-1)
如果您想直接在开单日期和取消日期之间添加差异列,我将使用numpy.where
:
df['date difference between signup and cancel'] = np.where(df['cancel_date'] == np.nan, (df['signup_date'].max() + pd.Timedelta(40, 'W'))-df['signup_date'], df['cancel_date']-df['signup_date'])
这将为您提供一个新列,您可以在其中直接获得注册日期和取消日期之间的差额