У меня есть два кадра данных, назовите их A и B. A имеет столбцы elementID, startDate, endDate, а B имеет столбцы elementID, date, dataValue. Я хотел бы добавить «средний» столбец к A. Для любой конкретной строки в A, мы должны иметь row.average = B[(B.elementID==row.elementID) & (row.startDate <= B.date) & (row.endDate >= B.date)].mean().
В настоящее время я просто наивно зацикливаюсь на каждом столбце A и вычисляю B [(B.elementID == row.elementID) & (row.startDate <= B.date) & (row.endDate> = B.date) ].имею в виду(). Однако как A, так и B имеют порядка 10 миллионов строк, а даты начала / окончания могут быть на расстоянии до 2 лет, поэтому этот подход занимает слишком много времени.
Чтобы быть конкретным, А выглядит примерно так
ID startDate endDate
3093 2015-01-09 2015-01-23
3093 2015-01-13 2015-03-20
3093 2015-01-20 2015-02-27
3093 2015-01-26 2015-03-06
3093 2015-01-27 2015-04-17
3093 2015-02-01 2015-07-17
3093 2015-02-03 2015-02-27
3093 2015-02-04 2016-01-15
...
B выглядит как
ID date dataValue
512 2014-12-31 0.1285
3093 2014-12-31 0.1176
3101 2014-12-31 0.1591
3103 2015-01-12 0.3001
3105 2015-01-12 0.2306
3107 2015-01-12 0.1524
3107 2015-01-13 0.0000
3107 2015-01-14 0.1739
3112 2015-01-15 0.0370
...