Comment calculer une moyenne pondérée chez les pandas
Vous pouvez utiliser la fonction suivante pour calculer une moyenne pondérée dans Pandas :
def w_avg(df, values, weights): d = df[values] w = df[weights] return (d * w).sum() / w.sum()
Les exemples suivants montrent comment utiliser cette syntaxe dans la pratique.
Exemple 1 : Moyenne pondérée chez les pandas
Le code suivant montre comment utiliser la fonction de moyenne pondérée pour calculer une moyenne pondérée pour un ensemble de données donné, en utilisant « prix » comme valeurs et « montant » comme pondération :
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
La moyenne pondérée du « prix » s’avère être de 9,706 .
Exemple 2 : Groupby et moyenne pondérée chez Pandas
Le code suivant montre comment utiliser la fonction de moyenne pondérée pour calculer la moyenne pondérée des prix, regroupés par commercial :
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
Nous pouvons voir ce qui suit :
- La moyenne pondérée du « prix » pour le commercial A est de 5,833 .
- La moyenne pondérée du « prix du représentant commercial B » est de 11,818 .
Ressources additionnelles
Comment comparer deux colonnes dans Pandas
Comment calculer la somme des colonnes dans Pandas
Comment calculer la moyenne des colonnes dans Pandas