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.

Diferencia en semanas entre la primera aparición y la aparición actual.

Tengo un conjunto de datos grande que incluye artículos y fechas. La versión simplificada se ve de la siguiente manera:

Artículo Fecha
1 2018-10-01
2 2018-04-03
1 2018-10-16
2 2018-04-15
1 2018-10-20
2 2018-04-30

Quiero agregar la columna df[‘ItemAge’], que muestra el número de semanas entre la fecha de aparición del artículo y la fecha de la primera aparición del artículo. Aquí, el número de semanas se redondea a números enteros. El valor de esta variable es 0 en la fecha en que el artículo apareció por primera vez. Por lo tanto, quiero obtener lo siguiente:

Artículo Fecha ItemAge
1 2018-10-01 0
2 2018-04-03 0
1 2018-10-16 2
2 2018-04-15 2
1 2018-10-20 3
2 2018-04-30 4

Estoy pensando en crear la variable “StartDate” para cada artículo como la fecha de la primera aparición de cada artículo. Posteriormente, iterar sobre los artículos y tomar la diferencia en días entre la nueva aparición del artículo y su “StartDate”. Luego, dividir este número de días por 7 y redondearlo a números enteros.

Sin embargo, no sé cómo escribir este código en Python. ¿Alguien tiene alguna sugerencia?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para lograr esta tarea, puedes utilizar la función de agrupamiento de pandas llamada “groupby” para agrupar el dataframe según el artículo, y luego utilizar la función “transform” para crear una nueva columna que calcule la diferencia en semanas entre la fecha de ocurrencia y la fecha de la primera ocurrencia para cada artículo. Aquí tienes un código de ejemplo:

    import pandas as pd
    
    # crear un dataframe de muestra
    df = pd.DataFrame({
            'Item': [1, 2, 1, 2, 1, 2],
            'Date': ['2018-10-01', '2018-04-03', '2018-10-16', '2018-04-15', '2018-10-20', '2018-04-30']
        })
    
    # convertir la columna Date en formato de fecha y hora
    df['Date'] = pd.to_datetime(df['Date'])
    
    # agrupar por Item y calcular la diferencia en semanas
    df['ItemAge'] = df.groupby('Item')['Date'].transform(lambda x: (x - x.min()).dt.days // 7)
    
    # imprimir el resultado
    print(df)
    

    Este código creará una nueva columna llamada “ItemAge”, que contiene el número de semanas entre la fecha de ocurrencia y la fecha de la primera ocurrencia para cada artículo, redondeado a números enteros. La salida debería ser la siguiente:

       Item       Date  ItemAge
    0     1 2018-10-01        0
    1     2 2018-04-03        0
    2     1 2018-10-16        2
    3     2 2018-04-15        2
    4     1 2018-10-20        3
    5     2 2018-04-30        4
    

Comments are closed.