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.

Cómo crear múltiples columnas a partir de una columna utilizando valores de otra columna?

Tengo un conjunto de datos de series de tiempo con casi 100 tiendas. El período de tiempo abarca un par de años (pero no para todas las tiendas, ya que algunas son más antiguas y otras más nuevas).

Para realizar predicciones de ventas futuras (primero con statsmodels), decidí cambiar el df a:

Fecha 23_ventas 57_ventas

01Jan2012 125 NaN
01Feb2012 12 NaN
01Mar2012 388 NaN
… … …
01Jan2013 … 456
01Feb2013 … 555
01Mar2013 … 545
01Abr2013 … 657
… … …

Puedo agregar esas columnas una por una, pero no puedo crear un tipo de loop. Mi enfoque para hacerlo uno por uno:

store_23 = df[df[‘Store_num’] == 23].copy()
store_23.set_index(store_23[‘date’], inplace=True)
store_23.drop([‘Store’, ‘date’], axis=1, inplace=True)
store_23.columns = [’23_ventas’]

También estaba pensando en crear una lista de nombres de ventas (nombres de columna):

df_list = df[‘Store_num’].unique()
y_list = [str(num) + “_y” for num in df_list]

y luego crear un nuevo df y agregar datos usando groupby, pero tampoco pude tener éxito en este enfoque.

¿Alguien puede darme algunas sugerencias? ¿Tal vez mi enfoque está completamente equivocado?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    En lugar de crear marcos de datos separados para cada tienda, se puede utilizar la función pivot_table de pandas para dar forma al marco de datos en la forma deseada. Aquí hay un ejemplo de fragmento de código:

    import pandas as pd
    
    # leer el marco de datos original
    df = pd.read_csv('sales_data.csv')
    
    # crear una tabla dinámica con fecha como índice, store_num como columnas y sales como valores
    sales_pivot = pd.pivot_table(df, values='Sales', index='date', columns='Store_num')
    
    # cambiar el nombre de las columnas con sufijo '_ sales', similar a su enfoque
    sales_pivot.columns = [str(col) + '_ventas' para col en ventas_pivot.columns]
    
    # restablecer el índice para mantener la fecha como una columna separada
    sales_pivot = sales_pivot.reset_index()
    
    # mostrar la tabla dinámica resultante
    print(sales_pivot.head())
    

    Este código debería producir el marco de datos de salida deseado. Luego, puede utilizar statsmodels u otras bibliotecas para realizar la previsión de series temporales en la tabla dinámica resultante.

    Tenga en cuenta que este enfoque asume que no hay entradas duplicadas para una combinación de tienda y fecha dada en el marco de datos original. Si hay duplicados, puede ser necesario agregar o combinarlos antes de pivotar la tabla.

Comments are closed.