Вы можете использовать следующую функцию для расчета средневзвешенного значения в Pandas:
def w_avg(df, values, weights):
d = df[values]
w = df[weights]
return (d \* w). sum () / w. sum ()
В следующих примерах показано, как использовать этот синтаксис на практике.
Пример 1: средневзвешенное значение в Pandas
В следующем коде показано, как использовать функцию средневзвешенного значения для расчета средневзвешенного значения для заданного набора данных, используя «цену» в качестве значений и «количество» в качестве весов:
import pandas as pd
#create DataFrame
df = pd.DataFrame({'sales_rep': ['A', 'A', 'A', 'B', 'B', 'B'],
'price': [8, 5, 6, 7, 12, 14],
'amount': [1, 3, 2, 2, 5, 4]})
#view DataFrame
df
sales_rep price amount
0 A 8 1
1 A 5 3
2 A 6 2
3 B 7 2
4 B 12 5
5 B 14 4
#find weighted average of price
w_avg(df, 'price', 'amount')
9.705882352941176
Средневзвешенное значение «цены» оказывается равным 9,706 .
Пример 2: Groupby и взвешенное среднее в Pandas
В следующем коде показано, как использовать функцию средневзвешенного значения для расчета средневзвешенного значения цены, сгруппированного по торговому представителю:
import pandas as pd
#create DataFrame
df = pd.DataFrame({'sales_rep': ['A', 'A', 'A', 'B', 'B', 'B'],
'price': [8, 5, 6, 7, 12, 14],
'amount': [1, 3, 2, 2, 5, 4]})
#find weighted average of price, grouped by sales rep
df.groupby('sales_rep').apply (w_avg, 'price', 'amount')
sales_rep
A 5.833333
B 11.818182
dtype: float64
Мы можем видеть следующее:
- Средневзвешенное значение «цены» для торгового представителя А составляет 5,833 .
- Средневзвешенное значение «цены для торгового представителя B» составляет 11,818 .
Дополнительные ресурсы
Как сравнить два столбца в Pandas
Как рассчитать сумму столбцов в Pandas
Как рассчитать среднее значение столбцов в Pandas