2013-08-04 4 views
9

У меня есть данные, загружаемые в фреймворк данных, который имеет мультииндекс для заголовков столбцов. В настоящее время я группируя данные по индексам столбцов взять среднее из групп и расчет доверительных интервалов 95%, как это:Стандартная ошибка игнорирования NaN в группах групп pandas

from pandas import * 
import pandas as pd 
from scipy import stats as st 

#Normalize to starting point then convert 
normalized = (data - data.ix[0]) * 11.11111 
#Group normalized data based on slope and orientation 
grouped = normalized.groupby(level=['SLOPE','DEPTH'], axis=1) 
#Obtain mean of each group 
means = grouped.mean() 
#Calculate 95% confidence interval for each group 
ci = grouped.aggregate(lambda x: st.sem(x) * 1.96) 

но проблема состоит в том, что средняя функции, которая используется на группы игнорируют значения NaN, в то время как функция scipy st.sem возвращает NaN, если в группе есть NaN. Мне нужно вычислить стандартную ошибку, игнорируя NaN как среднюю функцию.

Я пытался идти о расчете 95% доверительный интервал, как это:

#Calculate 95% confidence interval for each group 
ci = grouped.aggregate(lambda x: np.std(x)/??? * 1.96) 

станд в NumPy даст мне стандартное отклонение, игнорируя значения NaN, но мне нужно, чтобы разделить это на квадратный корень из размер группы, игнорирующий NaN, чтобы получить стандартную ошибку.

Что является самым простым способом вычисления стандартной ошибки при игнорировании NaN?

+0

попытаться включить в 'GroupBy () 'function this:' normalized.groupby (by = [col_name_with_NaN], level = ['SLOPE', 'DEPTH'], axis = 1) ', так что' Значения NaN' не должны отображаться в 'grouped' –

+0

Есть 36 столбцов, и в любой заданной строке могут быть NaN. недостающие данные. Вы предлагаете передать список всех имен столбцов? Что делает аргумент by = []? Я смотрю вокруг, но не могу понять этого. – pbreach

+0

Да, попробуйте передать все имена столбцов '36' аргументу' by'. Я не совсем понимаю, что этот аргумент, но он фильтрует NaNs ... –

ответ

8

count() метод Series объекта не будет возвращать не подсчет значения NaN:

import pandas as pd 
s = pd.Series([1,2,np.nan, 3]) 
print s.count() 

выход:

3 

Итак, попробуйте:

ci = grouped.aggregate(lambda x: np.std(x)/x.count() * 1.96) 
+0

Работал как шарм! Спасибо. – pbreach

+5

'grouped.aggregate (lambda x: np.std (x, ddof = 1) /np.sqrt (x.count()))' – Noah

Смежные вопросы