Я хочу рассчитать средневзвешенное значение для объекта RollingGroupby.К сожалению, я получил ошибку:
only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices
Это мой код:
np.random.seed(9999)
df = pd.DataFrame(np.random.random(20).reshape(10, 2), columns = ['val1', 'val2'])
df['id'] = np.repeat([1, 2], 5)
df['wt'] = [1, 2] * 5
def weighted_average(data, value, weight):
return np.average(data[value], weights = data[weight], axis = 0)
dfwavg = df.groupby('id')[['val1', 'wt']]\
.rolling(window=2, min_periods=1)\
.apply(weighted_average, 'wt')
Кто-нибудь знает, в чем проблема?Спасибо.
EDIT
Было бы замечательно, если бы решение использовало существующую структуру (с group.by.rolling.apply).Другими словами, лучшим вариантом может быть вложение измененной функции в apply()
.