Используйте Pandas для объединения двух фреймов данных с уникальными идентификаторами И суммой между датами, указанными в столбцах - PullRequest
0 голосов
/ 08 июля 2019

Я использую Pandas в Python 3.7 для обработки моих данных.

У меня есть два кадра данных, df_orders и df_sales, которые выглядят следующим образом:

df_orders:

StoreID    ProductID    OrderDate    Cover_Days
1234       0009998      20190510     2
1234       0009998      20190512     2
4321       0009998      20190510     2
4321       0087664      20190510     10

df_sales:

StoreID    ProductID    Date        TotalSales
1234       0009998      20190510    10
1234       0009998      20190511    10
4321       0009998      20190511    15
4321       0087664      20190511    50
4321       0087664      20190519    50

Я хочу присоединить df_sales к df_orders для StoreID, ProductID и суммы TotalSales в диапазоне от OrderDate до OrderDate + Cover_Days, чтобы получить результат:

df_result:

StoreID    ProductID    OrderDate    Cover_Days    Sum_TotalSales
1234       0009998      20190510     2             20
1234       0009998      20190512     2             0
4321       0009998      20190510     2             15
4321       0087664      20190510     10            100

Фрейм данных df_sales имеет около 5 миллионов строк в день продаж, поэтому эффективный ответ, очевидно, предпочтительнее!

Мысли

Edit:

Под "суммой TotalSales в диапазоне от OrderDate до OrderDate + Cover_Days" я подразумеваю, что я хочу суммировать все продажи, соответствующие трем условиям:

  1. df_sales.ProductID = df_orders.ProductID и
  2. df_sales.StoreID = df_orders.StoreID и
  3. , где df_sales.Date попадает в диапазон дат между df_orders.OrderDate (например, 20190510) и df_orders ['OrderDate' + 'Cover_Days'] (например, 20190510 + 2 = 20190512).

Причина в том, что данные заказа содержат несколько записей для каждой уникальной комбинации StoreID + ProductID, каждая с разными (не перекрывающимися) датами.

...