根据其他列在缺少日期的行中添加日期

时间:2019-06-12 08:52:54

标签: python pandas

我有一个包含时间序列数据的数据框。在一个栏中,我有注册日期,在其他栏中,有取消日期。我想添加一个缺少取消日期的日期,该日期小于特定日期,但最多40周。

我应该如何进行?

如果df['cancel_date']NaT,则添加最大日期。 + 40周。 df['cancel_date'] - df['signup_date']不应小于0。

2 个答案:

答案 0 :(得分:2)

IIUC,您可以将Series.fillnapandas.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'])

这将为您提供一个新列,您可以在其中直接获得注册日期和取消日期之间的差额