2013-05-22 4 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 

скажите, что у меня есть dataframe выше. какой самый простой способ получить серию с тем же индексом, которая является средним значением столбцов A и B? в среднем необходимо игнорировать значения NaN. твист заключается в том, что это решение должно быть гибким для добавления новых столбцов в фреймворк данных.как получить среднее значение столбцов данных данных

ближе я пришел был

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

однако, это, кажется, не игнорировать NaN значения

(примечание: я еще немного новичок в библиотеке панд, поэтому я угадывание есть очевидный способ сделать это, что мой ограниченный мозг просто не видит)

+2

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

+0

спасибо Рейчел, я ценю это – badideas

ответ

54

просто с помощью df.mean() будет Do The Right Thing (тм) по отношению к 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 

Вы можете использовать df[["A", "B"]].mean(axis=1), если другие столбцы игнорируются.

+1

Мне пришлось сделать df.mean (axis = 1), чтобы все было правильно, но спасибо для того, чтобы поставить меня на правильный путь. Думаю, мне нужно два или три кофе сегодня утром. :) – badideas

+1

@zaphod: да? Вот что я написал выше. [О, вы имеете в виду в первой строке, а не в примере. Там я говорил о поведении 'df.mean' w.r.t. NaNs, но я вижу, как это будет сбивать с толку.] – DSM

+0

Хе-хе, я ухожу, чтобы получить мои три кофе сейчас :) спасибо снова – badideas