У меня есть два кадра данных:
df1=
|id1 |id2 |id3 |date |value|
|a |b |c |2019-02-01|2 |
|a |b |d |2019-08-01|4 |
|a |b |e |2019-12-01|10 |
|a |b |f |2019-10-01|2 |
|a |b |e |2019-12-01|20 |
|a |b |f |2020-01-01|50 |
|a |b |c |2020-02-01|1 |
|a |b |d |2020-03-01|3 |
|a |b |c |2020-02-01|2 |
|a |b |e |2020-02-01|2 |
|x |y |d |2020-02-01|2 |
|x |y |e |2020-02-01|2 |
df2=
|id1 |id2 |date |expected_value|
|a |b |2020-04-01|200 |
|a |b |2020-05-01|40 |
|a |b |2020-06-01|70 |
|a |b |2020-06-01|70 |
|a |b |2020-06-01|70 |
|a |b |2020-06-01|70 |
|a |b |2020-06-01|70 |
|a |b |2020-10-01|2 |
|a |b |2020-12-01|400 |
|x |y |2020-04-01|20 |
|x |y |2020-05-01|50 |
|x |y |2020-12-01|1 |
Моя цель - сопоставить два кадра данных на (id1, id2, date)
, (date
: мы начинаем с текущей даты и до максимума date
в df2
) и итеративно выполнять некоторые сложные вычисления для вычисления нового value
для каждого id3
в df1
на основе expected_value
, указанного в df2
.
Выход одного date
будет вводом следующего date
(месяца) и так далее.
Я использую a для l oop сверх date
, потому что мне нужно иметь результаты на каждую дату, а выходные данные каждой даты будут входными данными для новой.
Время выполнения увеличивается (например, экспоненциально) за итерации, потому что я использовал filter
и join
много раз, чтобы отфильтровать df2
по заданной дате и объединить отфильтрованный кадр данных с df1
чтобы сделать вычисления ...
Я спрашиваю, можем ли мы сделать это лучше ...
На мой взгляд, проблема не может быть решена распределенным параллельным способом за date
.
Однако, есть ли способ распределить вычисления по различным значениям (id1,id2)
внутри для l oop по date
? и как мы можем это сделать?
Любая помощь приветствуется