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

标签 python numpy pandas scipy nan

我已将数据加载到数据框中,该数据框中的列标题具有多索引。目前,我一直在按列索引对数据进行分组,以获取组的平均值并计算 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)

但问题在于,在组上使用的 mean 函数会忽略 NaN 值,而如果组中有 NaN,则 scipy 函数 st.sem 会返回 NaN。我需要计算标准误差,同时像均值函数那样忽略 NaN。

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

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

numpy 中的 std 会给我忽略 NaN 值的标准偏差,但我需要将其除以忽略 NaN 的组大小的平方根以获得标准误差。

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

最佳答案

Series 对象的

count() 方法将不返回 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)

关于python - pandas groupby 组中忽略 NaN 的标准错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18039923/

相关文章:

python - 如何使用日期时间计算持续时间和停止时间?

python - Matplotlib 散点图在 x 轴上不采用字符串?

python - keras 的形状问题 `fit_generator()`

python - 如何将numpy数组转换为Matlab矩阵?

python - ast.literal_eval() 格式错误的节点或字符串,同时使用 array()s 列表转换字符串

python - 从 NLTK 格式分块斯坦福命名实体识别器 (NER) 输出

python - pandas - 与相同类别的列连接变成对象

python - 取三个集合的共同元素

Python pandas 计算每列中的出现次数

python - imp 模块已弃用,取而代之的是 importlib