У меня довольно "кросс-платформенный" вопрос. Я надеюсь, что это не слишком общее.
Одна из моих таблиц, скажем customers
, состоит из идентификаторов моих клиентов и связанных с ними демографических данных. Другая таблица, скажем, transaction
, содержит все покупки от покупателей в соответствующих магазинах.
Я заинтересован в анализе композиций корзины вместе с демографией в Python. Следовательно, я хотел бы иметь магазины в виде столбцов и сумму для данных покупателей в магазинах в моем фрейме данных
Для наглядности
select *
from customer
where id=1 or id=2
дает мне
id age gender
1 35 MALE
2 57 FEMALE
и
select *
from transaction
where id=1 or id=2
дает мне
customer_id shop amount
1 2 250
1 2 500
2 3 100
2 7 200
2 11 125
Который должен заканчиваться (предпочтительно) кадром данных Pandas как
id age gender shop_2 shop_3 shop_7 shop_11
1 35 MALE 750 0 0 0
2 57 FEMALE 0 100 200 125
Так, что в последних столбцах агрегированные корзины покупателей.
Я попытался создать в Python словарь покупок и сумм для каждого клиента в SQL следующим образом:
select customer_id, array_agg(concat(cast(shop as varchar), ' : ', cast(amount as varchar))) as basket
from transaction
group by customer_id
В результате
id basket
1 ['2 : 250', '2 : 500']
2 ['3 : 100', '7 : 200', '11 : 125']
, который можно легко соединить на столе клиента.
Однако это решение не является оптимальным из-за того, что в [] это строки, а не целые числа. Следовательно, это требует много манипуляций и циклов в Python, чтобы получить его в формате, который я хочу.
Есть ли способ объединить покупки в SQL, чтобы Python мог легче читать и объединять в столбцы?