python – 在计算Pandas创建的数据框中列的平均值时指定“skip NA”

我正在通过复制一些R小插曲的郊游来学习Pandas包.现在我使用R的dplyr包作为例子:

http://cran.rstudio.com/web/packages/dplyr/vignettes/introduction.html

R脚本

planes <- group_by(hflights_df, TailNum)
delay <- summarise(planes,
  count = n(),
  dist = mean(Distance, na.rm = TRUE))
delay <- filter(delay, count > 20, dist < 2000)

Python脚本

planes = hflights.groupby('TailNum')
planes['Distance'].agg({'count' : 'count',
                        'dist' : 'mean'})

我怎样才能在python中明确说明NA需要被跳过?

解决方法:

这是一个棘手的问题,因为你不这样做. Pandas会自动从聚合函数中排除NaN数.考虑我的df:

    b   c   d  e
a               
2   2   6   1  3
2   4   8 NaN  7
2   4   4   6  3
3   5 NaN   2  6
4 NaN NaN   4  1
5   6   2   1  8
7   3   2   4  7
9   6   1 NaN  1
9 NaN NaN   9  3
9   3   4   6  1

内部count()函数将忽略NaN值,因此将意味着().我们获得NaN的唯一一点是,唯一的值是NaN.然后,我们取空集的平均值,结果是NaN:

In[335]: df.groupby('a').mean()
Out[333]: 
          b    c    d         e
a                              
2  3.333333  6.0  3.5  4.333333
3  5.000000  NaN  2.0  6.000000
4       NaN  NaN  4.0  1.000000
5  6.000000  2.0  1.0  8.000000
7  3.000000  2.0  4.0  7.000000
9  4.500000  2.5  7.5  1.666667

聚合函数以相同的方式工作:

In[340]: df.groupby('a')['b'].agg({'foo': np.mean})
Out[338]: 
        foo
a          
2  3.333333
3  5.000000
4       NaN
5  6.000000
7  3.000000
9  4.500000

附录:注意标准dataframe.mean API如何允许您控制NaN值的包含,其中默认值是排除.

上一篇:R--match()与%in%的区别


下一篇:JS学习总结(红宝书第五章----基本引用类型)