У меня есть два кадра данных панд.Один из них имеет следующий формат:
|Customer ID | Login_Session_Start_Time | Login_Session_End_Time |
|------------|--------------------------|------------------------|
| 1 | 2018-04-05 10:03:23 | 2018-04-05 10:15:12 |
| 1 | 2018-04-19 22:12:42 | 2018-04-19 22:45:11 |
| 2 | 2018-04-01 08:23:14 | 2018-04-01 14:34:01 |
........
, в котором указывается, сколько времени каждый клиент провел на определенном веб-сайте.У меня также есть другой фрейм данных из другого источника, в котором перечислены, что они купили и в какое время.Это выглядит так:
| Customer ID | Purchase Description | Purchase Time |
|-------------|--------------------------|----------------------|
| 1 | Shirt | 2018-04-05 10:11:04 |
| 2 | Pants | 2018-04-01 09:35:13 |
| 2 | Shirt | 2018-04-01 13:12:09 |
.........
Мне нужно объединить два кадра данных таким образом, чтобы он сообщал мне, сколько элементов каждого видаклиент покупал в течение каждого сеанса входа в систему.Таким образом, для приведенного выше примера это будет выглядеть следующим образом:
|Customer ID | Login_Session_Start_Time | Login_Session_End_Time | Num_Shirts | Num_Pants |
|------------|--------------------------|------------------------|------------|-----------|
| 1 | 2018-04-05 10:03:23 | 2018-04-05 10:15:12 | 1 | 0 |
| 2 | 2018-04-01 08:23:14 | 2018-04-01 14:34:01 | 1 | 1 |
.....
Таким образом, это потребует слияния во время фильтрации (когда время покупки находится в пределах Login_Session_Start_Time и Login_Session_End_Time), группировки (по описанию покупки) и, возможно, поворота.
Единственный способ, которым я мог думать об этом, - это циклически проходить по каждой строке первого кадра данных, а затем в цикле выбирать субкадр второго кадра данных с соответствующим идентификатором клиента и временем покупки в пределахпределы первой строки, затем группировка и поворот этого субкадра, затем сборка всех этих субкадров вместе в последний.Это работает, но очень медленно, особенно с фреймами данных с сотнями тысяч строк.
Есть ли лучший способ сделать это?Спасибо за вашу помощь!