2 votes

Pandas - Différence de date en utilisant une colonne comme décalage

J'ai un df avec deux colonnes : date et décalage (valeur entière). Je veux soustraire le nombre de mois (basé sur la valeur de la colonne) de la date et obtenir la date de fin de mois. J'ai essayé :

df['NewDate'] = df['Date'] - relativedelta(months=df['Offset'])

et :

df['NewDate'] = df.apply(lambda x: x['Date']-pd.offsets.MonthEnd(months=x['Offset']), axis=1)

mais je n'ai pas réussi à faire fonctionner l'une ou l'autre (la seconde fonctionne très lentement à cause de df.apply de toute façon).

Orig df
Date      Offset
12/31/17  0  
12/31/17  1
12/31/17  2
12/31/17  3

New df
Date      Offset  NewDate
12/31/17  0       12/31/17
12/31/17  1       1/31/18   
12/31/17  2       2/28/18
12/31/17  3       3/31/18

3voto

jezrael Points 290608

Vous pouvez utiliser numpy pour une solution plus rapide :

df['NewDate'] = df['Date'].values.astype('datetime64[M]') + 
                df['Offset'].add(1).values.astype('timedelta64[M]') - 
                np.array([1], dtype='timedelta64[D]')
print (df)
        Date  Offset    NewDate
0 2017-12-31       0 2017-12-31
1 2017-12-31       1 2018-01-31
2 2017-12-31       2 2018-02-28
3 2017-12-31       3 2018-03-31

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X