Estaba tratando de hacer un promedio ponderado y me encontré con una duda:
Quería crear una nueva columna llamada respuesta que calcula el resultado entre cada línea y una lista de valores ponderados nombrados en este caso como month
. Si lo utilizo df.mean()
, obtendría un promedio simple por mes y eso no es lo que quiero. La idea es darle más importancia al fin de año y menos importancia a la demanda en el inicio del año. Por eso me gustaría usar el cálculo de promedio ponderado.
En Excel , usaría la siguiente fórmula. Tengo problemas para convertir este cálculo al marco de datos de pandas.
=SUMPRODUCT( demands[@[1]:[12]] ; month )/SUM(month)
No pude encontrar una solución a este problema y realmente agradezco la ayuda con este tema.
Gracias de antemano.
Aquí hay un marco de datos ficticio que sirve como ejemplo:
demand = pd.DataFrame({'1': [360, 40, 100, 20, 55],
'2': [500, 180, 450, 60, 50],
'3': [64, 30, 60, 10, 0],
'4': [50, 40, 30, 60, 50],
'5': [40, 24, 45, 34, 60],
'6': [30, 34, 65, 80, 78],
'7': [56, 45, 34, 90, 58],
'8': [32, 12, 45, 55, 66],
'9': [32, 56, 89, 67, 56],
'10': [57, 35, 75, 48, 9],
'11': [56, 33, 11, 6, 78],
'12': [23, 65, 34, 8, 67]
})
months = [i for i in range(1,13)]
Solo use numpy.average
, especificando weights
:
demand["result"]=np.average(demand, weights=months, axis=1)
https://docs.scipy.org/doc/numpy-1.15.1/reference/generated/numpy.average.html
Salidas:
1 2 3 4 5 6 ... 8 9 10 11 12 result
0 360 500 64 50 40 30 ... 32 32 57 56 23 58.076923
1 40 180 30 40 24 34 ... 12 56 35 33 65 43.358974
2 100 450 60 30 45 65 ... 45 89 75 11 34 58.884615
3 20 60 10 60 34 80 ... 55 67 48 6 8 43.269231
4 55 50 0 50 60 78 ... 66 56 9 78 67 55.294872
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras