将聚合函数应用于数据表列并返回值,而不是数据表

时间:2019-10-12 16:39:03

标签: python datatable data.table

也许是一个愚蠢的问题,..

R data.table中,如果我想获取一列的平均值,则可以引用foo$x之类的列 vector 并使用{{1 }}。

我不知道如何使用Python datatable执行此操作。例如,

mean(foo$x)

虽然最后一条语句在技术上可行,但似乎很麻烦,因为它首先返回1x1 # imports import numpy as np import datatable as dt from datatable import f # make datatable np.random.seed(1) foo = dt.Frame({'x': np.random.randn(10)}) # calculate mean dt.mean(foo.x) # error dt.mean(foo[:, f.x]) # Expr:mean(<Frame [10 rows x 1 col]>) ??? foo[:, dt.mean(f.x)][0, 0] # -0.0971 ,我从中提取唯一的值。我正在努力解决的基本问题是,我不了解python数据表中是否存在列 vectors 和/或如何引用它们。

简而言之,有没有一种简单的方法可以使用python datable计算列的平均值?

1 个答案:

答案 0 :(得分:2)

稍微概括一下,让我们从一个包含几列的框架开始:

>>> import numpy as np
>>> from datatable import f, dt
>>> np.random.seed(1)
>>> foo = dt.Frame(x=np.random.randn(10), y=np.random.randn(10))
>>> foo
            x           y
--  ---------  ----------
 0   1.62435    1.46211  
 1  -0.611756  -2.06014  
 2  -0.528172  -0.322417 
 3  -1.07297   -0.384054 
 4   0.865408   1.13377  
 5  -2.30154   -1.09989  
 6   1.74481   -0.172428 
 7  -0.761207  -0.877858 
 8   0.319039   0.0422137
 9  -0.24937    0.582815 

[10 rows x 2 columns]

首先,简单的.mean()方法将返回一个1x2帧,具有按列的含义:

>>> foo.mean()
             x          y
--  ----------  ---------
 0  -0.0971409  -0.169588

[1 row x 2 columns]

如果要获取单个列的均值,则必须首先从foo中选择该列:foo[:, f.y]foo[:, 'y'],或简单地foo['y']

>>> foo['y'].mean()
            y
--  ---------
 0  -0.169588

[1 row x 1 column]

现在,如果要使用数字而不是1x1帧,则可以使用[0, 0]选择器,或者调用函数.mean1()来代替:

>>> foo['y'].mean()[0, 0]
-0.1695883821153589

>>> foo['y'].mean1()
-0.1695883821153589