Я хотел рассчитать среднегодовое средневзвешенное значение для некоторых ежедневных наблюдений.Соответственно, мне нужно сначала рассчитать средневзвешенное значение для каждого дня, а затем найти регулярное (одинаково взвешенное) среднее значение для всех дней в году (рисунок данных и желаемый результат приведены ниже.)
Вот мой не-фрагмент рабочего кода:
def ave_annual(s):
return s.groupby(s.index.year).mean()
wav = lambda x: np.average(x['premium'], weights=x.tna)
df.groupby('date').apply(wav).pipe(ave_annual)
первое агрегирование (на уровне даты (дня)) возвращает все NaN
.
Мне удалось вычислить среднее значение пошагово имедленный подход:
master_2 = (master_1.assign(tna_sum = master_1.groupby('date')
.tna.transform('sum'))[lambda x: x['tna_sum'] > 0 ]
res_premium = master_2.groupby(
'date')['prem_wieghted2'].sum().pipe(ave_annual)
Мне было интересно (1), что плохого в том, что я получаю NaN
с, и (2) как я могу использовать этот подход (np.average
) для вычисления средних значений длядве переменные.
Данные:
date ticker premium spread tna
3/4/2013 x -0.69 0.1261 7.2329
3/4/2013 y 0.096 0.296 49.496
3/4/2013 x 0.142 0.4352 167.5251
3/6/2013 x -0.69 0.1261 7.2329
3/6/2013 z 0.096 0.296 49.496
3/6/2013 y 0.084 0.21 110
3/4/2019 x NaN 0.1392 16.431
3/4/2019 y NaN NaN 100.6774
![enter image description here](https://i.stack.imgur.com/ZkW8h.png)