Я пытаюсь получить стандартную ошибку средневзвешенного значения некоторых столбцов в DF.У меня есть код ниже, но для DF около 800k строк, это занимает около 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 строк занимает около 1/6 времени, чтобы запустить более 700 000 строк.Есть ли способ улучшить это?