Skip to content

Instantly share code, notes, and snippets.

@ShilGen
Created October 22, 2024 17:33
Show Gist options
  • Save ShilGen/76ab162857d49c84a78b46966f7def76 to your computer and use it in GitHub Desktop.
Save ShilGen/76ab162857d49c84a78b46966f7def76 to your computer and use it in GitHub Desktop.

Для создания сводной таблицы по продажам в разрезе брендов по месяцам с использованием Pandas, нужно выполнить следующие шаги:

* Загрузить данные из двух Excel-файлов: с заказами и с ассортиментом.
* Преобразовать столбец с датами в формат даты.
* Объединить данные по столбцу "Артикул" (ключ для объединения).
* Добавить вычисляемые столбцы, такие как месяц и год.
* Создать сводную таблицу по брендам и месяцам.
* Сохранить результат в новый Excel файл.

Описание шагов:

* Загрузка данных: Мы загружаем два файла Excel — с заказами и ассортиментом.

* Преобразование даты: Столбец с датой заказа (Принят в обработку) преобразуем в формат datetime с помощью pd.to_datetime. Это позволит легко извлекать месяцы и годы.

* Добавление столбцов "Год" и "Месяц": Извлекаем год и месяц из даты для последующей группировки данных.

* Объединение данных: Используем pd.merge для объединения двух таблиц по столбцу Артикул, чтобы получить информацию о брендах.

* Фильтрация отмененных заказов: Убираем заказы со статусом "Отменен", если они присутствуют в данных.

* Создание сводной таблицы: Сводная таблица создается с помощью pivot_table, группируя данные по годам, месяцам и брендам. В качестве значений мы суммируем итоговую стоимость товаров и количество проданных товаров.

* Экспорт в Excel: Полученную сводную таблицу сохраняем в новый Excel файл sales_report_by_brand.xlsx.

Требования к данным:

* В файле заказов должны быть столбцы с названиями: Принят в обработку, Статус, Артикул, Итоговая стоимость товара, Количество.
* В файле ассортимента — столбцы: Артикул, Бренд.
import pandas as pd
# Загрузка данных
orders_df = pd.read_excel('orders.xlsx')
assortment_df = pd.read_excel('assortment.xlsx')
# Преобразование даты в нужный формат (Принят в обработку -> datetime)
orders_df['Принят в обработку'] = pd.to_datetime(orders_df['Принят в обработку'], format='%d.%m.%Y %H:%M:%S')
# Добавление столбцов с годом и месяцем
orders_df['Год'] = orders_df['Принят в обработку'].dt.year
orders_df['Месяц'] = orders_df['Принят в обработку'].dt.month
# Объединение данных по артикулу (Артикул)
merged_df = pd.merge(orders_df, assortment_df[['Артикул', 'Бренд']], on='Артикул', how='left')
# Убираем отмененные заказы (если такие есть) по Статусу
merged_df = merged_df[merged_df['Статус'] != 'Отменен']
# Сводная таблица по брендам, месяцам и годам (по количеству продаж и общей сумме)
pivot_table = merged_df.pivot_table(
index=['Год', 'Месяц', 'Бренд'], # Индексы для группировки
values=['Итоговая стоимость товара', 'Количество'], # Значения для суммирования
aggfunc={'Итоговая стоимость товара': 'sum', 'Количество': 'sum'}, # Суммируем по стоимости и количеству
fill_value=0 # Заполняем пропуски нулями
)
# Сброс индексов для красивого экспорта в Excel
pivot_table_reset = pivot_table.reset_index()
# Сохранение результата в новый Excel файл
pivot_table_reset.to_excel('sales_report_by_brand.xlsx', index=False)
print("Сводная таблица успешно создана и сохранена в 'sales_report_by_brand.xlsx'.")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment