2016-01-12 11 views
16

Ho un 'DataFrame` che ha valori mancanti occasionali, e simile a questa:media Riga-saggio per un sottoinsieme delle colonne tenendo conto di valori mancanti

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

mi piacerebbe aggiungi un nuovo column al mio riquadro dati in cui calcolare la media su tutto il columns per ogni row.

Significato, per Mike, avrei bisogno (df['Monday'] + df['Wednesday'])/2, ma per Jenna, mi piacerebbe sufficiente utilizzare df['Wednesday amt.']/1

Qualcuno sa il modo migliore per tenere conto di questa variazione che deriva da valori mancanti e calcolare la media ?

risposta

30

Si può semplicemente:

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 

perché .mean() ignora i valori mancanti per impostazione predefinita: see docs.

per selezionare un sottoinsieme, è possibile:

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 
+0

che è grande, grazie! C'è un modo per escludere una selezione delle colonne senza creare un nuovo frame di dati del tutto, o dovrei creare un nuovo df da un sottoinsieme di df, eseguire 'df.mean (axis = 1)', e poi unire quello con il frame di dati originale? – scrollex

+1

Prego, guarda la risposta aggiornata. – Stefan

Problemi correlati