Собираю самую попсу, чуть посложнее базы:)
Сделал шаблон в коллабе, просто бери, копируй и решай задачки https://colab.research.google.com/drive/1kvB4-kmQXhlv4FQ_KaSQDX0_iM3uXp-9?usp=sharing — внутри коллаба приведён пример, как вообще использовать внутри sql с пандасом одновременно.
Если что, используется sqllite3
1. Скользящее среднее
Нужно посчитать скользящее среднее дохода за 3 предыдущих месяца.
Готовый датасет:
data = [[1, '2022-04-01', 50000],[2, '2022-04-02', 100000],[3, '2022-04-03', 75000],[4, '2022-05-04', 120000],[5, '2022-06-05', 80000],[6, '2022-06-06', 60000],[7, '2022-07-07', 90000],[8, '2022-07-08', 110000],[9, '2022-01-09', 70000],[10, '2022-08-10', 95000],[11, '2022-09-11', 85000]]
orders = pd.DataFrame(data, columns=['ID', 'date', 'Incom']).astype({'ID':'int64', 'date':'datetime64', 'Incom':'int64'})
Обрати внимание, как сделаны месяца и что они идут с пропусками:)
2. Максимальная зарплата сотрудника внутри департамента
Необходимо найти максимальную зарплату внутри каждого отдела.
data = [[1, 1, 50000],[1, 2, 100000],[1, 3, 75000],[2, 1, 120000],[2, 2, 80000],[3, 2, 60000],[3, 3, 90000],[3, 5, 110000],[3, 6, 70000],[4, 1, 95000],[4, 2, 85000]]
depart = pd.DataFrame(data, columns=['dep', 'ID', 'money']).astype({'dep':'int64', 'ID':'int64', 'money':'int64'})
Задача часто заставляет впадать в ступор, хотя по факту простейшая. Многое зависит от условия, т.к. чем подробнее нужен запрос, тем больше шагов к достижению нужного результата
3. Посчитать пользователей, которые покупали 3 месяца подряд
В общем-то может быть любое количество месяцев, или дней.
Суть в том, что вроде бы можно и хэвингом посчитать кол-во и выбрать нужный нам период. Можно оконной функцией. Но тру джедаи догадываются, что в месяцах может быть пропуск, что значительно усложняет сам запрос. Код для игрушечный данных:
data = [[1, '2022-04-01', 50000],[1, '2022-05-02', 100000],[1, '2022-06-03', 75000],[2, '2022-04-04', 120000],[2, '2022-05-05', 80000],[2, '2022-07-06', 60000],[3, '2022-07-07', 90000],[3, '2022-08-08', 110000],[4, '2022-09-09', 70000],[4, '2022-01-10', 95000],[4, '2022-02-11', 85000]]
orders = pd.DataFrame(data, columns=['user_id', 'date', 'Incom']).astype({'user_id':'int64', 'date':'datetime64', 'Incom':'int64'})
Подскажу, что тут нужно комбинировать и оконную функцию, и джойны со смещением, типа когда вот так ON rp1.rn = rp2.rn — 1