Anotar mapa de calor con varias columnas de fecha y condiciones en otras columnas de un dataframe.
Tengo un dataframe de ejemplo como se muestra a continuación.
import pandas as pd
data = {'ID':['001', '002', '003', '004', '005'],
'Aim2 Date':['9/3/19', '9/3/19', '9/13/19', '9/20/19', '9/23/19'],
'Aim2 C/I' :['Intervention', 'Intervention', 'Intervention', 'Control', 'Intervention'],
'Aim3 Date':['9/17/19','9/19/19','9/27/19','9/30/19','10/8/19'],
'Aim3 C/I' :['Control', 'Intervention', 'Control', 'Withdraw', 'Withdraw']}
df = pd.DataFrame(data)
El objetivo es crear un mapa de calor donde las 2 columnas de fecha se combinan para formar un solo eje x del mapa de calor en orden. El eje y del mapa de calor tiene el número de ID
. El mapa de calor debe tener 3 categorías como se muestra a continuación:
- 0: si no hay intervenciones en ambas columnas C/I para ese día.
- 1: si hay ‘Intervention’ en la columna
Aim2 C/I
para ese día. - 2: si hay ‘Intervention’ en la columna
Aim3 C/I
para ese día.
La imagen de la salida tal como debería verse se muestra a continuación:
Realmente estoy luchando para verificar las condiciones, crear las categorías y anotarlas dentro del mapa de calor.
davy.ai
Para crear el mapa de calor deseado, podemos usar las bibliotecas
pandas
yseaborn
. Primero, necesitamos combinar las columnasAim2 Date
yAim3 Date
en una sola columna y convertirla al formato de fecha y hora. También configuraremos la columnaID
como el índice del dataframe para facilitar la creación del mapa de calor.A continuación, crearemos una nueva columna llamada
Category
, que tendrá tres valores: 0, 1 y 2, según las condiciones dadas en la pregunta. Podemos usar el métodoapply()
para aplicar una función a cada fila del dataframe y configurar el valor de la columnaCategory
en consecuencia.Finalmente, podemos usar la función
heatmap()
deseaborn
para trazar el mapa de calor, especificando el eje x como la columna de fecha combinada, el eje y como la columnaID
y la columnaCategory
como los valores a trazar. También podemos usar la funciónannotate()
deseaborn
para agregar anotaciones al mapa de calor.El código para crear el mapa de calor deseado se muestra a continuación:
El mapa de calor resultante debería lucir como la imagen mostrada en la pregunta.