2017-07-25 1 views
1

J'ai un gros ensemble de données dont j'ai besoin de faire des opérations de datation, et comme cela prend trop de temps, je me demandais s'il y avait un autre moyen d'augmenter la vitesse. Trame de données ressemble à ce qui suit:Améliorer les performances de l'opération Datetime dans les pandas

Date, Month 
2017-01-01, 0 
2017-01-01, 1 
2017-01-01, 2 

Je dois créer une autre colonne qui ajoute la colonne de mois à la colonne date, il donc ressembler à ce qui suit:

Date, Month, newDate 
2017-01-01, 0, 2017-01-01 
2017-01-01, 1, 2017-02-01 
2017-01-01, 2, 2017-03-01 

Ma méthode actuelle utilise appliquer la fonction et relativedelta procédé comme:

def newDateCalc(self, row): 
return row[0] + relativedelta(months = row[1]) 

df['newDate'] = df[['Date', 'Month']].apply(lambda row: newDateCalc(row), axis = 1)

Merci pour votre aide à l'avance,

Répondre

1

Voici ma vectorisé tentative:

df['newDate'] = (df.Date.values.astype('M8[M]') + 
       df.Month.values * np.timedelta64(1, 'M')).astype('M8[D]') 

Résultat:

In [106]: df 
Out[106]: 
     Date Month newDate 
0 2017-01-01  0 2017-01-01 
1 2017-01-01  1 2017-02-01 
2 2017-01-01  2 2017-03-01 
+0

Ooh, une belle ... –

+0

@ cᴏʟᴅsᴘᴇᴇᴅ, merci! :) – MaxU

+0

Cela fonctionne très bien! Merci beaucoup – Hojin

1

Vous pouvez utiliser df.transform avec relativedelta:

In [960]: df.transform(lambda x: x['Date'] + relativedelta(months=x['Month']), axis=1) 
Out[960]: 
0 2017-01-01 
1 2017-02-01 
2 2017-03-01 
dtype: datetime64[ns]