Имхо если в скрипте работать с полной базой, т.е. делать SELECT * FROM
то результат можно сразу преобразовывать в pandas в pandas.DataFrame, там есть функция чтения из sql.
Можно группировать по уникальным сочетаниям - user_id+продукт, тут предполагается что данные пользователя у одного user_id всегда одинаковые.
pandas.df1.groupby(['user_id','product']).count()
Или, если через SQL, делать запросы поочерёдном по user_id и уже в них делать groupby и count
SELECT name, tel, product, COUNT(product)
FROM order
WHERE user_id=....
GROUP BY name, product
В таблице у одного и того же юзера номера телефонов разные, это как-то нужно обрабатывать, потому что при выборке с группировкой будет выдаваться из этого столбца одно из значений, соответствующее группировке, и оно может быть пустым.