2013-05-22 18 views
23
    A  B 
DATE     
2013-05-01  473077 71333 
2013-05-02   35131 62441 
2013-05-03   727 27381 
2013-05-04   481  1206 
2013-05-05   226  1733 
2013-05-06   NaN  4064 
2013-05-07   NaN 41151 
2013-05-08   NaN  8144 
2013-05-09   NaN  23 
2013-05-10   NaN  10 

dire che ho il dataframe sopra. qual è il modo più semplice per ottenere una serie con lo stesso indice che è la media delle colonne A e B? la media deve ignorare i valori NaN. la svolta è che questa soluzione deve essere flessibile per l'aggiunta di nuove colonne al dataframe.come ottenere la media dei valori delle colonne del dataframe

il più vicino sono venuto era

df.sum(axis=1)/len(df.columns) 

tuttavia, questo non sembra ignorare il NaN Valori

(nota: io sono ancora un po 'nuova per la biblioteca panda, quindi sono indovinando c'è un modo ovvio per fare questo che il mio cervello limitato semplicemente non vedere)

+2

LEGGERE http://pandas.pydata.org/pandas-docs/dev/missing_data.html –

+0

grazie Rachel, lo apprezzo – badideas

risposta

54

semplicemente usando df.mean() farà la cosa giusta (tm) rispetto al NaNs:

>>> df 
       A  B 
DATE      
2013-05-01 473077 71333 
2013-05-02 35131 62441 
2013-05-03  727 27381 
2013-05-04  481 1206 
2013-05-05  226 1733 
2013-05-06  NaN 4064 
2013-05-07  NaN 41151 
2013-05-08  NaN 8144 
2013-05-09  NaN  23 
2013-05-10  NaN  10 
>>> df.mean(axis=1) 
DATE 
2013-05-01 272205.0 
2013-05-02  48786.0 
2013-05-03  14054.0 
2013-05-04  843.5 
2013-05-05  979.5 
2013-05-06  4064.0 
2013-05-07  41151.0 
2013-05-08  8144.0 
2013-05-09  23.0 
2013-05-10  10.0 
dtype: float64 

È possibile utilizzare df[["A", "B"]].mean(axis=1) se ci sono altre colonne da ignorare.

+1

ho dovuto fare df.mean (asse = 1) per farlo bene, ma grazie per avermi messo sulla strada giusta. Penso di aver bisogno di altri due o tre caffè stamattina. :) – badideas

+1

@ zaphod: huh? Questo è quello che ho scritto sopra. [Oh, intendi nella prima riga, non nell'esempio. Stavo parlando del comportamento di 'df.mean' w.r.t. NaNs, ma posso vedere come sarebbe confuso.] – DSM

+0

hehe, ora vado a prendere i miei tre caffè :) grazie ancora – badideas

Problemi correlati