Скажем, у меня есть такой фрейм данных:
date M1_start M1_end SimPrices_t0_exp
0 2017-12-31 2018-01-01 2018-01-31 16.151667
1 2018-01-01 2018-02-01 2018-02-28 45.138445
2 2018-01-02 2018-02-01 2018-02-28 56.442648
3 2018-01-03 2018-02-01 2018-02-28 59.769931
4 2018-01-04 2018-02-01 2018-02-28 50.171695
И я хочу получить среднее значение наблюдений SimPrices_t0_exp, значение «date» которых находится между M1_start и M1_end для каждого наблюдения
Я пробовал это
mask = ((df['date'] >= df['M1_start']) & (df['date'] <= df['M1_end']))
df['mymean'] = df['SimPrices_t0_exp'][mask].mean()
Как бы то ни было, это возвращает NaN для каждого наблюдения, я полагаю, потому что маска применяется для каждой строки, индивидуально проверяя условия маски для своей собственной даты, которая никогда не вернет true.
Кто-нибудь может мне помочь? Я боролся с этой проблемой в течение двух дней
Пример: для первого наблюдения результирующий столбец будет иметь в своем первом наблюдении среднее значение 45,13,56,44,59,76,50,17 в данном конкретном случае
если кому-то это поможет, псевдокод будет выглядеть примерно так:
for obs in observations:
start = obs.start
end = obs.end
sum = 0
obs_count = 0
for obs2 in observations:
if obs2.date >= start and obs2.date <= end:
sum += obs.SimPrices_t0_exp
obs_count += 1
obs.mean = sum/obs_count
Спасибо !!