web-dev-qa-db-fra.com

Moyenne par ligne pour un sous-ensemble de colonnes avec des valeurs manquantes

J'ai un 'DataFrame` qui a parfois des valeurs manquantes et qui ressemble à ceci:

          Monday         Tuesday         Wednesday 
      ================================================
Mike        42             NaN               12
Jenna       NaN            NaN               15
Jon         21              4                 1

J'aimerais ajouter une nouvelle column à mon bloc de données dans lequel je calculerais la moyenne sur toutes les columns pour chaque row.

Cela signifie que, pour Mike, il me faudrait (df['Monday'] + df['Wednesday'])/2, mais pour Jenna, j'utiliserais simplement df['Wednesday amt.']/1

Est-ce que quelqu'un connaît le meilleur moyen de prendre en compte cette variation résultant de valeurs manquantes et de calculer la moyenne?

26
scrollex

Vous pouvez simplement:

df['avg'] = df.mean(axis=1)

       Monday  Tuesday  Wednesday        avg
Mike       42      NaN         12  27.000000
Jenna     NaN      NaN         15  15.000000
Jon        21        4          1   8.666667

car .mean() ignore les valeurs manquantes par défaut: voir docs .

Pour sélectionner un sous-ensemble, vous pouvez:

df['avg'] = df[['Monday', 'Tuesday']].mean(axis=1)

       Monday  Tuesday  Wednesday   avg
Mike       42      NaN         12  42.0
Jenna     NaN      NaN         15   NaN
Jon        21        4          1  12.5
63
Stefan

Alternative - utilisant iloc (peut également utiliser loc ici):

df['avg'] = df.iloc[:,0:2].mean(axis=1)
0
Amir F