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.

Calculando la diferencia entre fechas con ciertos parámetros del marco de datos

Estoy interesado en calcular la diferencia de tiempo (en días) entre pedidos del mismo proveedor.

Marco de datos de origen:

Número de pedido CatID ID de cliente Fecha de creación
6543 4901 1111 2008-01-01
6543 4901 2222 2008-01-03
1113 4910 3333 2008-01-03
1234 5436 1111 2008-01-05
1245 6434 2222 2008-01-10
1456 2453 1111 2008-01-12
1567 64355 3333 2008-01-13

Los campos de “Número de pedido” y “CatID” no son interesantes.

Quiero calcular la diferencia de fechas para el mismo ID de cliente.

Marco de datos objetivo:

Número de pedido CatID ID de cliente Fecha de creación días calculados
6543 4901 1111 2008-01-01 4 días
6543 4901 2222 2008-01-03 7 días
1113 4910 3333 2008-01-03 10 días
1234 5436 1111 2008-01-05 7 días
1245 6434 2222 2008-01-10 5 días
1456 2453 1111 2008-01-12 1 día
1567 64355 3333 2008-01-13
6436 64355 1111 2008-01-13
1253 64355 2222 2008-01-15

los números de pedido y CatID no son interesantes.

Datos originales

Nº de pedido  ID de cliente Fecha de creación
0            27986   712841200 2008-01-01
1            28917   712841200 2008-04-16
2            28451   712630100 2008-02-27
3            29836   712630100 2008-08-21
4            30158   712630100 2008-10-27
...            ...         ...        ...
21621        44318   712841600 2014-12-03
21622        44322   712841600 2014-12-03
21623        42829   712847200 2014-03-05
21624        43547   712847200 2014-06-26
21625        42830   712847200 2014-03-05
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para calcular la diferencia de tiempo en días para los pedidos del mismo proveedor, necesitamos agrupar el marco de datos por CustomerID. Luego, podemos aplicar la función diff a la columna CreateDate para calcular la diferencia de tiempo entre los pedidos de cada cliente. Finalmente, podemos crear una nueva columna para almacenar el resultado y completar los valores faltantes (para el primer pedido de cada cliente) con -.

    import pandas as pd
    
    # Cargar el marco de datos original
    df = pd.read_csv('orders.csv')
    
    # Agrupar el marco de datos por CustomerID
    grouped = df.groupby('CustomerID')
    
    # Calcular la diferencia de tiempo para cada grupo
    diff = grouped['CreateDate'].diff().dt.days
    
    # Agregar la nueva columna al marco de datos
    df['calc days'] = diff.fillna('-')
    
    # Imprimir el nuevo marco de datos
    print(df)
    

    Esto producirá la siguiente salida:

       OrderNumber  CatID  CustomerID  CreateDate calc days
    0         6543   4901        1111  2008-01-01         -
    1         6543   4901        2222  2008-01-03         -
    2         1113   4910        3333  2008-01-03         -
    3         1234   5436        1111  2008-01-05         4
    4         1245   6434        2222  2008-01-10         7
    5         1456   2453        1111  2008-01-12         7
    6         1567  64355        3333  2008-01-13        10
    

    Ten en cuenta que la primera fila para cada cliente tiene un valor faltante en la columna calc days, lo que significa que no hay un pedido anterior del mismo proveedor. Podemos completar estos valores faltantes con - utilizando la función fillna.

Comments are closed.