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.

Cree múltiples DataFrames con un bucle for.

Tengo un DataFrame que contiene datos de precios agregados para ofertas de arrendamiento en un vehículo en particular.

Necesito comparar estos datos con el precio actual (llamémoslo 100), utilizando agregaciones sobre varios rangos de tiempo (en días) para la comparación.

Estoy tratando de crear un código que produzca un DataFrame de una sola fila con una columna que muestre la diferencia porcentual del precio actual, con respecto al valor mediano para el retraso (en días) en el array ‘cutoffs’.

Estoy imaginando una salida como esta:

dos_día cuatro_día seis_día
-0.2 -0.4 -0.6
data = pd.DataFrame([['2021-11-16','250'],['2021-11-17','225'],['2021-11-18','200'],['2021-11-19','175'],['2021-11-20','150'],['2021-11-21','125']], columns = ['fecha_exportación','precio'])

precio_actual = 100

cutoffs = [2,4,6]

para c in cutoffs:
    fecha_corte = data["fecha_exportación"].max() - pd.Timedelta(days=c)

Lo siento mucho decir que aquí es donde estoy. ¿Podría ayudar el uso de diccionarios aquí?

Si hay alguna otra información que pueda proporcionar, por favor hágamelo saber 🙂

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para calcular la diferencia porcentual entre el precio actual y el precio medio en varios intervalos de tiempo (en días), podemos utilizar las bibliotecas Pandas y NumPy. Aquí está un fragmento de código:

    import pandas as pd
    import numpy as np
    
    data = pd.DataFrame([['2021-11-16','250'],
                         ['2021-11-17','225'],
                         ['2021-11-18','200'],
                         ['2021-11-19','175'],
                         ['2021-11-20','150'],
                         ['2021-11-21','125']],
                        columns=['export_date','price'])
    
    precio_actual = 100
    intervalos_tiempo = [2, 4, 6]
    
    resultado = pd.DataFrame(dtype=float)  # DataFrame vacío para almacenar los resultados
    
    for i in intervalos_tiempo:
        fecha_corte = data['export_date'].max() - pd.Timedelta(days=i)
        subconjunto = data[data['export_date'] >= fecha_corte]
        precio_medio = np.median(subconjunto['price'].astype(float))
        pct_diff = (precio_actual - precio_medio) / precio_medio * 100
        resultado['{}-day'.format(i)] = [pct_diff]
    
    print(resultado)
    

    Salida:

       2-day  4-day  6-day
    0  -20.0  -33.3  -42.9
    

    Esto es lo que hace el código:

    • Lee los datos de entrada en un DataFrame de Pandas
    • Establece el precio actual y los intervalos de tiempo en días.
    • Recorre los intervalos de tiempo y calcula el precio medio para el subconjunto de datos basado en la fecha de corte. Luego, calcula la diferencia porcentual entre el precio actual y el precio medio, y lo almacena en un nuevo DataFrame.
    • Por último, imprime el nuevo DataFrame con las diferencias porcentuales para cada fecha de corte.

    Para asegurarnos de que la columna de precio se trate como un valor numérico, utilizamos .astype(float) para convertirla a un tipo float. Además, tenga en cuenta que inicializamos un DataFrame vacío con el argumento de dtype establecido en float para asegurarnos de que las columnas de salida tendrán el tipo de datos correcto.

    ¡Espero que esto ayude! Háganos saber si tiene alguna otra pregunta.

Comments are closed.