我有一个大的数据集,我每天都在计算每个ID的残差标准偏差,代码是正确的,但当我编译代码时,它只是不断运行
这是我的数据
在此处输入图像描述
这是我的代码:
前两行为每个ID创建一个repeatf输出,它将显示在我的数据帧中,以便通过最后3个代码。
C['mean'] = C.apply(lambda x: C[(C.ID == x.ID)].residual.mean(), axis=1)
C['size']=C.apply(lambda x: C[(C.ID == x.ID)].residual.count(), axis=1)
C['diff2']=(C['residual']-C['Mean'])**2
C['var']=C['diff2']/(B['size']-1)
C['stddev'] = C['var']** 0.5
我的问题是如何提高代码的效率?
问题是您要重复过滤DataFrame,搜索ID与当前行匹配的所有记录。此外,你要做两次:一次是平均值,一次是大小。
在这种情况下,您应该在ID上使用groupby((,并聚合残差。
如果我理解你的最终目标是计算每个ID的标准偏差,那么试试这样的方法:
import numpy as np
D = C.groupby("ID")["residual"].agg([np.mean, np.size, np.var, np.std]).reset_index()
D应该是具有计算统计信息的DataFrame(可能需要重命名列(。