Resta un año de una columna de fecha y hora en pandas

Tengo una columna de fecha y hora como la siguiente:

>>> df['ACC_DATE'].head(2) 538 2006-04-07 550 2006-04-12 Name: ACC_DATE, dtype: datetime64[ns] 

Ahora, quiero restar un año de cada fila de esta columna. ¿Cómo puedo lograr lo mismo y qué biblioteca puedo usar?

El campo esperado –

  ACC_DATE NEW_DATE 538 2006-04-07 2005-04-07 549 2006-04-12 2005-04-12 

Gracias.

Puedes usar DateOffset para lograr esto:

 In [15]: df['NEW_DATE'] = df['ACC_DATE'].apply(lambda x: x - pd.DateOffset(years=1)) df Out[15]: ACC_DATE NEW_DATE index 538 2006-04-07 2005-04-07 550 2006-04-12 2005-04-12 

actualizar

Mirar esta pregunta 3 años después, usar la apply es necesario, simplemente puede hacer:

 In[88]: df['NEW_DATE'] = df['ACC_DATE'] - pd.DateOffset(years=1) df Out[88]: ACC_DATE NEW_DATE index 538 2006-04-07 2005-04-07 550 2006-04-12 2005-04-12 

que es una operación vectorizada

Podrías usar pd.Timedelta:

 df["NEW_DATE"] = df["ACC_DATE"] - pd.Timedelta(days=365) 

O reemplazar:

 df["NEW_DATE"] = df["ACC_DATE"].apply(lambda x: x.replace(year=x.year - 1)) 

Pero ninguno de los dos capturará años bisiestos, por lo que podría usar dateutil.relativedelta :

 from dateutil.relativedelta import relativedelta df["NEW_DATE"] = df["ACC_DATE"].apply(lambda x: x - relativedelta(years=1)) 

Utilice DateOffset :

 df["NEW_DATE"] = df["ACC_DATE"] - pd.offsets.DateOffset(years=1) print (df) ACC_DATE NEW_DATE index 538 2006-04-07 2005-04-07 550 2006-04-12 2005-04-12