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

说我有上面的数据帧。获得与列A和B的平均值相同的指标的系列最简单的方法是什么?平均需要忽略NaN值。这个解决方案需要灵活地将新列添加到数据框中。如何获得数据帧列值的平均值

最接近我今天来是

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

然而,这似乎并没有忽略NaN值

(注:我还是有点新来的大熊猫库,所以我猜测有一个明显的方式做到这一点,我的大脑的限制是根本无法看到)

+2

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

+0

感谢雷切尔,我很感激 – badideas

回答

54

只需用df.mean()会做正确的事(TM)相对于NaN的:

>>> 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”的行为。 NaNs,但我可以看到这会让人困惑。] – DSM

+0

呵呵,我现在要拿走我的三杯咖啡:)再次感谢 – badideas