2015-07-01 20 views
9

ho una colonna datetime come qui sotto -Sottrarre un anno da una colonna datetime in panda

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

ora, voglio sottrarre un anno dalla ogni riga di questa colonna. Come posso ottenere lo stesso & quale libreria posso usare?

Il campo previsto -

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

Grazie.

risposta

23

È possibile utilizzare DateOffset per ottenere ciò:

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 
+3

Sono curioso, che cosa fa quando la data di partenza è 29 febbraio? –

+0

@MarkRansom buona domanda Ho appena provato questo, per '2004-02-29' sottrarre un anno diventa' 2003-02-28' – EdChum

8

Si potrebbe utilizzare pd.Timedelta:

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

O sostituire:

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

Ma né interferirà anni bisestili così si potrebbe usare dateutil.relativedelta:

from dateutil.relativedelta import relativedelta 

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

Uso 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 
+0

Che cosa stai facendo qui? ;) – IanS

+0

È dupe, quindi aggiungere un'altra soluzione;) Grazie. – jezrael

+1

Questa dovrebbe essere la risposta accettata in quanto utilizza la vettorizzazione – user32185

Problemi correlati