在pandas groupby组中忽略NaN的标准错误

pbr*_*ach 9 python numpy nan scipy pandas

我将数据加载到一个数据框中,该数据框具有列标题的多索引.目前我一直按列索引对数据进行分组,以获取组的平均值并计算95%置信区间,如下所示:

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)
Run Code Online (Sandbox Code Playgroud)

但问题是组上使用的平均函数忽略NaN值,而如果组中有NaN,则scipy函数st.sem返回NaN.我需要计算标准误差,而忽略NaNs,就像平均函数那样.

我试过计算这样的95%置信区间:

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

numpy中的std会给我一个忽略NaN值的标准差,但是我需要将这个除以NaNs的组大小的平方根除以得到标准误.

在忽略NaN的同时计算标准误差的最简单方法是什么?

HYR*_*YRY 9

count()Series对象的方法将不返回NaN值计数:

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

输出:

3
Run Code Online (Sandbox Code Playgroud)

所以,试试:

ci = grouped.aggregate(lambda x: np.std(x) / x.count() * 1.96)
Run Code Online (Sandbox Code Playgroud)

  • `grouped.aggregate(lambda x:np.std(x,ddof = 1)/np.sqrt(x.count()))` (5认同)