Creo que esto debería ser simple, pero lo que he visto son técnicas que implican iterar sobre los campos de fecha de un marco de datos para determinar la diferencia entre dos fechas. Y estoy teniendo problemas con eso. Estoy familiarizado con MSSQL DATEDIFF, así que pensé que Pandas datetime tendría algo similar. Tal vez sí, pero me lo estoy perdiendo.
¿Existe una forma Pandonic de determinar la cantidad de meses como un número entero entre dos fechas (datetime) sin necesidad de iterar? Tenga en cuenta que potencialmente hay millones de filas, por lo que el rendimiento es una consideración.
Las fechas son objetos de fecha y hora y el resultado sería este: la nueva columna es Mes:
Date1 Date2 Months 2016-04-07 2017-02-01 11 2017-02-01 2017-03-05 1Aquí hay una respuesta muy simple, mi amigo:
df['nb_months'] = ((df.date2 - df.date1)/np.timedelta64(1, 'M'))y ahora:
df['nb_months'] = df['nb_months'].astype(int)Una solución alternativa, posiblemente más elegante, es df.Date2.dt.to_period('M') - df.Date1.dt.to_period('M') , que evita errores de redondeo.
df.assign( Months= (df.Date2.dt.year - df.Date1.dt.year) * 12 + (df.Date2.dt.month - df.Date1.dt.month) ) Date1 Date2 Months 0 2016-04-07 2017-02-01 10 1 2017-02-01 2017-03-05 1