Pandas: calcule el promedio ponderado por fila usando un marco de datos y una serie

Arnold Souza

Estaba tratando de hacer un promedio ponderado y me encontré con una duda:

Problema

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:

Código de 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)]

Visualización del problema

problema

Grzegorz Skibinski

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

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

Pandas: calcule el promedio ponderado por fila usando un marco de datos y una serie

Calcule el promedio ponderado usando un pandas / marco de datos

Calcule el promedio y agregue una nueva fila al marco de datos

groupby ponderado promedio y suma en el marco de datos de pandas

Calcule la desviación estándar y promedio por 5 filas en un marco de datos de pandas

Calcule la desviación estándar y promedio por 5 filas en un marco de datos de pandas

¿Por qué se recupera una sola fila de un marco de datos como diccionario y no como Serie?

¿Cómo pivotar un marco de datos de pandas para incluir un promedio ponderado?

Calcular el promedio ponderado de mi marco de datos

Promedio ponderado anual del marco de datos de pandas

Cree una suma móvil y un promedio de diferentes variables en el marco de datos de pandas

Calcule el promedio ponderado con pandas dataframe

¿Cómo puedo crear una nueva serie usando filas y columnas específicas de un marco de datos de pandas?

Gire el marco de datos de pandas de una sola fila a una fila por elemento

Gire el marco de datos de pandas de una sola fila a una fila por elemento

Convierta un marco de datos cuyo nombre de fila sea mes y el nombre de columna sea año en un objeto de serie temporal usando R

Encontrar el promedio de valores en una columna y crear un nuevo marco de datos que distribuya el promedio

Pandas: contraer un marco de datos de múltiples índices en una sola fila y columna separadas por una coma

agrupar el marco de datos por fecha y crear un nuevo marco de datos de puntuación promedio

Calcule stdev para una fila y una fila anterior en pandas sin error de serie

R: Calcule el porcentaje de valores faltantes (NA) por día para una columna en un marco de datos usando datos de panel y elimine los días con datos faltantes de más del 25 %

¿Cómo obtener una serie de un marco de datos de pandas usando una serie de nombres de columna?

Filtre y guarde una serie de objetos en el marco de datos por dplyr

¿Cómo comparar el marco de datos de Pandas en una columna, fila por fila?

Cómo buscar en el marco de datos de pandas fila por fila y extraer variables

Calcule las diferencias entre una fila y el resto de los datos por grupo

Usando una serie como entrada, ¿cómo puedo encontrar filas con valores coincidentes en un marco de datos de pandas? por ejemplo, df.loc [serie]?

Descubra los valores y las fechas de una serie de datos en el marco de pandas

Formateo de un marco de datos completo de pandas como una cadena, fila por fila