Применить статистическую функцию к столбцу с данными и возвращаемому значению, а не к данным - PullRequest
3 голосов
/ 12 октября 2019

Возможно глупый вопрос, но ..

В R data.table , если я хочу получить среднее значение столбца, я могу сослаться на столбец вектор как foo$x и вычислите его среднее значение как mean(foo$x).

Я не могу понять, как выполнить эту операцию с Python datatable . Например,

# 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

Хотя последнее утверждение технически работает, оно кажется слишком громоздким, так как сначала возвращает 1x1 datatable, из которого я извлекаю единственное значение. Фундаментальная проблема, с которой я борюсь, заключается в том, что я не понимаю, существует ли столбец векторы в базе данных Python и / или как на них ссылаться.

Короче говоря, есть ли более простой способрассчитать среднее значение столбца с датой Python?

1 Ответ

1 голос
/ 15 октября 2019

Немного обобщая, давайте начнем с фрейма, который имеет несколько столбцов:

>>> 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...