熊猫优化自举

时间:2018-10-08 11:04:49

标签: python pandas numpy

我正在尝试获取DF中某些列的加权平均值的标准误差。我有下面的代码,但是对于大约80万行的DF,这大约需要9秒钟,所以我想知道是否有我遗漏的任何改进措施,但仍然可以节省大量时间

def bootstrap_se_mean(df: pd.DataFrame, cols:list, w, k=1000):
    res = np.zeros(shape=(k, len(cols)))
    for i in range(k):
        s = df.sample(frac=1, replace=True)[cols +[w]]
        for j, c in enumerate(cols):
            res[i, j] = np.average(s[c], weights=s[w], axis=0)
    return np.apply_along_axis(np.std, 0, res)

编辑示例:

test=pd.DataFrame({'w': [100, 500, 200, 1000, 300], 'x1': [1.15, 33, -18.2, 3.6, -3.3], 'x2': [22.9, -61.2, -11.2, 33.4, 13.8]})
bootstrap_se_mean(test, ['x1', 'x2'], 'w')

我还必须在数据切片上运行该函数。似乎df.sample有相当大的开销,因此在5000行上运行它大约需要70%行运行时间的1/6。有办法改善吗?

0 个答案:

没有答案