es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Contando cumpleaños por mes por cliente en un dataframe.

Tengo un dataframe con los cumpleaños de los usuarios de clientes específicos en un dataframe, y quiero contar las ocurrencias por mes, pero también por cliente. Así, al final tendría todas las ocurrencias de fechas de cumpleaños por mes para el cliente #1, todas las ocurrencias de fechas de cumpleaños por mes para el cliente #2, etc., de manera similar a lo que se describe en esta pregunta en la cual sugieren usar esto:

df.groupby([df['birthdate'].dt.year.rename('year'), df['birthdate'].dt.month.rename('month')]).agg({'count'})

para un escenario donde se desea contar los cumpleaños por mes (no también por cliente).

¿Cómo puedo hacer esto?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para contar las ocurrencias de cumpleaños por mes y por cliente, puedes usar el método groupby() de pandas dos veces. Primero agrupa por la columna de ID del cliente, luego agrupa por el objeto datetime que contiene los cumpleaños y, finalmente, cuenta el número de ocurrencias por mes usando el método size().

    Aquí tienes un código de ejemplo que asume que tu DataFrame tiene columnas llamadas client_id y birthdate:

    df.groupby('client_id')['birthdate'] \
        .apply(lambda x: x.dt.strftime('%Y-%m').value_counts()) \
        .unstack(fill_value=0)
    

    El primer groupby() agrupa los datos por la columna client_id. El método apply() aplica una función a cada grupo de cumpleaños, que convierte la fecha en un formato de cadena “YYYY-MM” y luego cuenta las ocurrencias de cada mes usando el método value_counts(). Finalmente, el método unstack() pivota los datos para crear una tabla donde las filas son los clientes y las columnas son los meses, con los valores siendo los conteos.

    El argumento fill_value=0 llena con ceros los meses que no tienen cumpleaños.

Comments are closed.