Obteniendo la diferencia de días entre fechas en la misma columna en un groupby en Pandas.
Tengo un dataframe de pandas como este:
user_id | code | earliest_date |
---|---|---|
A | N18.1 | 2016-04-08 |
A | N18.2 | 2017-06-08 |
A | N18.3 | 2018-04-08 |
B | N18.1 | 2016-06-16 |
B | N18.2 | 2016-08-16 |
C | N18.1 | 2021-01-11 |
En la columna de “code” los valores siempre son de una lista especificada, en este caso [N18.1,N18.2,N18.3], etc.
Quiero un dataframe que muestre los días que toma avanzar desde el código N18.x al siguiente en secuencia para cada usuario. Estoy pensando en algo como esto:
user_id | N18.1 -> N18.2 | N18.2 -> N18.3 |
---|---|---|
A | 426 | 304 |
B | 60 | n/a |
C | n/a | n/a |
Agradeceré mucho tu ayuda.
davy.ai
Para crear el dataframe deseado, puedes utilizar las funciones pivot y groupby de pandas. Primero, calcula los días que tarda en progresar de un código al siguiente para cada usuario utilizando la función groupby de pandas para agrupar los datos por user_id, luego calcula la diferencia entre los valores consecutivos de earliest_date para cada grupo. A continuación, pivota el dataframe resultante utilizando la columna code como columnas y la columna earliest_date_difference como valores, y la columna user_id como índice. Por último, renombra las columnas para reflejar la dirección de progresión entre los códigos.
Aquí está el código que puede lograr esto:
Esto imprimirá el dataframe deseado: