Maison >développement back-end >Tutoriel Python >Comment imputer les valeurs manquantes chez les pandas à l'aide de moyens de groupe ?

Comment imputer les valeurs manquantes chez les pandas à l'aide de moyens de groupe ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-05 16:29:10590parcourir

How to Impute Missing Values in Pandas Using Group Means?

Imputation NaN avec moyenne de groupe chez les pandas

Remplir les valeurs manquantes en utilisant la moyenne au sein de chaque groupe est une tâche courante lorsque l'on travaille avec des données tabulaires. Considérons le DataFrame suivant avec des valeurs manquantes :

df = pd.DataFrame({'value': [1, np.nan, np.nan, 2, 3, 1, 3, np.nan, 3],
                   'name': ['A', 'A', 'B', 'B', 'B', 'B', 'C', 'C', 'C']})

Notre objectif est d'imputer les valeurs manquantes avec la moyenne de chaque groupe en fonction de la colonne « nom ».

Pour y parvenir, nous peut utiliser les fonctions groupby() et transform() dans Pandas :

grouped = df.groupby('name').mean()
df["value"] = df.groupby("name").transform(lambda x: x.fillna(x.mean()))

La fonction groupby() crée des groupes basés sur la colonne 'name' et Mean() calcule la valeur moyenne pour chaque groupe. La fonction transform() applique cette valeur moyenne à chaque ligne de chaque groupe et remplit les valeurs manquantes.

Le DataFrame résultant :

print(df)

  name  value
0    A      1
1    A      1
2    B      2
3    B      2
4    B      3
5    B      1
6    C      3
7    C      3
8    C      3

Explication :

  • La fonction Mean() calcule la valeur moyenne au sein de chaque groupe, ce qui donne un nouveau DataFrame avec des groupes signifie.
  • La fonction transform() applique la méthode fillna() à chaque groupe, en utilisant la valeur moyenne comme valeur de remplissage. Cela remplit les valeurs manquantes avec la moyenne spécifique à chaque groupe.

Solution alternative :

Une autre approche de l'imputation des valeurs manquantes basée sur un groupe est :

impute_cols = ['value']
df[impute_cols] = df[impute_cols].fillna(df.groupby('name')[impute_cols].transform('mean'))

Les deux méthodes obtiennent le même résultat, mais cette dernière approche offre plus de flexibilité lors de l'imputation de plusieurs colonnes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn