Я пытаюсь применить функцию, кумулятивно, к значениям, которые находятся в пределах окна, определенного столбцами 'start' и 'finish'. Таким образом, «начало» и «окончание» определяют интервалы, в которых значение «активно»; для каждой строки я хочу получить сумму всех «активных» значений за раз.
Вот пример 'грубой силы', который делает то, что я преследую - есть ли более элегантный, быстрый или более эффективный способ памяти?
df = pd.DataFrame(data=[[1,3,100], [2,4,200], [3,6,300], [4,6,400], [5,6,500]],
columns=['start', 'finish', 'val'])
df['dummy'] = 1
df = df.merge(df, on=['dummy'], how='left')
df = df[(df['start_y'] <= df['start_x']) & (df['finish_y'] > df['start_x'])]
val = df.groupby('start_x')['val_y'].sum()
Первоначально, df:
start finish val
0 1 3 100
1 2 4 200
2 3 6 300
3 4 6 400
4 5 6 500
Результат, который я получаю:
1 100
2 300
3 500
4 700
5 1200