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.

Excluir una columna del valor calculado.

Soy un traductor de español que traduce documentos de IT. Traduzca lo siguiente al español. No traduzca el código y la salida en formato markdown.
Soy nuevo en la biblioteca e intento descubrir cómo agregar columnas a una tabla dinámica con la media y la desviación estándar de los datos de la fila para los últimos tres meses de datos de transacción.

Aquí está el código que configura la tabla dinámica:

AnterioresTresMeses = [prevmesparaanálisis, prevmes2paraanálisis, prevmes3para_análisis]
dfAnterioresTresMeses = df[df[‘Mes’].isin(AnterioresTresMeses)]

ptConsumoHistorico = dfAnterioresTresMeses.pivot_table(dfAnterioresTresMeses, index=[‘Número de pieza del cliente’], columns=[‘Mes’], aggfunc={‘Cantidad enviada’: np.sum})

ptConsumoHistorico[‘Media’] = ptConsumoHistorico.mean(numeric_only=True, axis=1)
ptConsumoHistorico[‘Desv Estándar’] = ptConsumoHistorico.std(numeric_only=True, axis=1)
ptConsumoHistorico

La tabla pivote resultante se ve así:

El problema es que la columna de desviación estándar incluye la media en sus cálculos, mientras que solo quiero que use los datos brutos de los últimos tres meses. Por ejemplo, la Desv. Est. del número de pieza 2225 debería ser 11.269, no 9.2.

Estoy seguro de que hay una mejor manera de hacer esto y simplemente me estoy perdiendo algo.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para calcular la desviación estándar de los datos crudos de los tres meses anteriores, puede agregar una función personalizada al parámetro aggfunc del método pivot_table. Aquí hay un fragmento de código actualizado que debería darle el resultado que busca:

    previousThreeMonths = [prev_month_for_analysis, prev_month2_for_analysis, prev_month3_for_analysis]
    dfPreviousThreeMonths = df[df['Month'].isin(previousThreeMonths)]
    
    def std_raw_data(x):
        return np.std(x.values)
    
    ptHistoricalConsumption = dfPreviousThreeMonths.pivot_table(dfPreviousThreeMonths,
                                                                index=['Customer Part #'],
                                                                columns=['Month'],
                                                                aggfunc={'Qty Shp':np.sum, 'Qty Shp': std_raw_data}
                                                                )
    
    ptHistoricalConsumption['Mean'] = ptHistoricalConsumption.mean(numeric_only=True, axis=1)
    ptHistoricalConsumption
    

    Tenga en cuenta que agregamos una nueva función std_raw_data que calcula la desviación estándar de los datos de la fila y la pasamos al parámetro aggfunc junto con la función 'Qty Shp':np.sum. También eliminamos la columna Std Dev de la tabla dinámica ya que ahora es redundante con la nueva función.

Comments are closed.