Условное агрегирование одного столбца на основе значений другого в Pyspark - PullRequest
0 голосов
/ 29 мая 2020

Хотя я встречал один вопрос на похожие строки, но он не соответствует моей цели. Так что разместите его здесь и с нетерпением жду ответов. У меня есть 2 фрейма данных pyspark: клиенты еженедельно тратят на продукт

enter image description here

Товар первая и последняя неделя продаж enter image description here

Мне нужно получить данные о расходах клиентов в категории, соответствующей каждому продукту, в зависимости от первой и последней недели продуктов продаж. Например, соответствует продукту W, поскольку он присутствовал только на 2-й неделе, поэтому мне нужно учитывать только расходы категории клиентов только на 2-й неделе enter image description here

Я изо всех сил пытаюсь получить моя голова вокруг него, но не повезло. Ищем предложения.

1 Ответ

0 голосов
/ 29 мая 2020

Думаю, я понял. Это сложнее, чем я мог подумать, но я думаю, что это то, что вы хотите:

select t1.*, t2.category_spend
from table1 t1 join
     (select t2.product, sum(t1.spend) as category_spend
      from table1 t1 join
           table2 t2
           on t1.week between t2.weekstart between t2.weekend
      group by t2.product
     ) t2w
     on t2w.product = t1.product;

EDIT:

Основываясь на вашем комментарии, logi c в основном тот же . customer не различается в вопросе, поэтому его можно просто включить «везде»:

select t1.*, t2.category_spend
from table1 t1 join
     (select t1.customer, t2.product, sum(t1.spend) as category_spend
      from table1 t1 join
           table2 t2
           on t1.week between t2.weekstart between t2.weekend
      group by t2.product, t1.customer
     ) t2w
     on t2w.product = t1.product and t2w.customer = t1.customer;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...