From 2d30118d6a020df9a69ac2422abfc432ef9c498c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Herculano?= Date: Mon, 23 Jun 2025 14:30:35 -0300 Subject: [PATCH] =?UTF-8?q?mudan=C3=A7as=20pra=20gerar=20a=20c11?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- promoção/promoção_EUD_ciclo07.ipynb | 881 ++----------- promoção/promoção_boti_ciclo07.ipynb | 1729 +++++++++++++++++++++----- 2 files changed, 1562 insertions(+), 1048 deletions(-) diff --git a/promoção/promoção_EUD_ciclo07.ipynb b/promoção/promoção_EUD_ciclo07.ipynb index 661a068..434a7ce 100644 --- a/promoção/promoção_EUD_ciclo07.ipynb +++ b/promoção/promoção_EUD_ciclo07.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -14,7 +14,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -32,33 +32,14 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\joao.herculano\\AppData\\Local\\Temp\\ipykernel_28528\\119945099.py:10: DtypeWarning: Columns (7) have mixed types. Specify dtype option on import or set low_memory=False.\n", - " df_draft = pd.concat([pd.read_csv(file) for file in csv_files], ignore_index=True)\n" - ] - }, - { - "data": { - "text/plain": [ - "(115164, 46)" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Caminho onde estão as subpastas com os arquivos CSV\n", "\n", "# Set the path to the folder containing CSV files\n", - "folder_path = r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\DB_PROMOÇÕES\\EUDORA\\202510\\DRAFT_PDVS_SEM\" # arquivo dos drafts\n", + "folder_path = r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\DB_PROMOÇÕES\\EUDORA\\202511\\DRAFT_PDVS_SEM_\" # arquivo dos drafts\n", "\n", "# Pattern to match all CSV files\n", "csv_files = glob.glob(os.path.join(folder_path, '*.csv'))\n", @@ -72,7 +53,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -81,14 +62,14 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "\n", "\n", "# Caminho onde estão as subpastas com os arquivos CSV\n", - "pasta_entrada = r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\DB_PROMOÇÕES\\EUDORA\\202510\\estoque\"\n", + "pasta_entrada = r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\DB_PROMOÇÕES\\EUDORA\\202511\\estoque\"\n", "\n", "# Lista todas as subpastas dentro de \"ESTOQUE\"\n", "subpastas = [os.path.join(pasta_entrada, d) for d in os.listdir(pasta_entrada) if os.path.isdir(os.path.join(pasta_entrada, d))]\n", @@ -122,47 +103,25 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\styles\\stylesheet.py:237: UserWarning: Workbook contains no default style, apply openpyxl's default\n", - " warn(\"Workbook contains no default style, apply openpyxl's default\")\n" - ] - } - ], + "outputs": [], "source": [ - "df_bi_preco = pd.read_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\DB_PROMOÇÕES\\EUDORA\\202510\\preçobi\\TABELA DE PREÇOS (4).xlsx\")" + "df_bi_preco = pd.read_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\DB_PROMOÇÕES\\EUDORA\\202511\\preço BI\\TABELA DE PREÇOS (2).xlsx\")" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['SKU1', 'SKU2', 'Descrição', 'MARCA', 'CATEGORIA', 'LINHA', 'UF',\n", - " 'Tipo Preço', 'PC', 'PV'],\n", - " dtype='object')" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df_bi_preco.columns" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -174,7 +133,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -184,7 +143,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -206,7 +165,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -215,7 +174,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -224,7 +183,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -256,80 +215,16 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CicloINICIO CICLOFIM CICLODURAÇÃOMARCADateNUM_CICLOANO_CICLOCICLOMAIS2dias_ate_inicio
2262C2025112025-07-162025-08-0521EUDORA2025-07-1611C2025C20251342
\n", - "
" - ], - "text/plain": [ - " Ciclo INICIO CICLO FIM CICLO DURAÇÃO MARCA Date NUM_CICLO \\\n", - "2262 C202511 2025-07-16 2025-08-05 21 EUDORA 2025-07-16 11 \n", - "\n", - " ANO_CICLO CICLOMAIS2 dias_ate_inicio \n", - "2262 C2025 C202513 42 " - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "filtered_calendario" ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -338,7 +233,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -347,16 +242,16 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "df_tabela = pd.read_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\DB_PROMOÇÕES\\EUDORA\\202510\\tabela promo\\Tabela-de-Promocoes_C10_att-1747056411627.xlsx.xlsx\")\n" + "df_tabela = pd.read_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\DB_PROMOÇÕES\\EUDORA\\202511\\tabela promo\\Tabela-de-Promocoes_C11-(1)-1747747476284.xlsx.xlsx\")\n" ] }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -373,7 +268,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -382,7 +277,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -391,7 +286,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -400,7 +295,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -409,33 +304,16 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['Ciclo', 'Veiculo', 'Tipo de Promoção', 'Estratégia de Promoção',\n", - " 'Tipo_mecanica', 'Promo Período Limitado?', 'EAM', 'Categoria',\n", - " 'Cód. Combo', 'Código do Item', 'Descrição do Item',\n", - " 'Chamada Promocional', 'Valor do Guia', 'Preço Promocionado',\n", - " '% de Desconto', 'RE compra por', 'RE Vende por', 'RE lucra (R$)',\n", - " 'MATCH', 'PDV', 'UF', 'DESCRIÇÃO PDV', 'ANALISTA'],\n", - " dtype='object')" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df_tabela.columns" ] }, { "cell_type": "code", - "execution_count": 24, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -444,7 +322,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -453,7 +331,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -462,41 +340,19 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(1518, 69)" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "df_final = pd.merge(left=df_draft,right=df_tabela,right_on=['Código do Item','PDV'],left_on=['SKU','PDV'],how='inner')\n", + "df_final = pd.merge(left=df_draft,right=df_tabela,right_on=['Código do Item','PDV'],left_on=['SKU','PDV'],how='right')\n", "df_final.shape " ] }, { "cell_type": "code", - "execution_count": 28, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(1518, 74)" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df_final = pd.merge(left=df_final, right=filtered_calendario[['Ciclo','INICIO CICLO','FIM CICLO','DURAÇÃO','match','dias_ate_inicio']], on='match',how='inner')\n", "df_final.shape" @@ -504,20 +360,9 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(1518, 74)" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "#df_final = pd.merge(left=df_final,right=df_pdv[['PDV', 'CANAL', 'DESCRIÇÃO PDV', 'PDV DESC','UF', 'MARCA', 'ANALISTA']],on = 'PDV',how='inner')\n", "df_final.shape" @@ -525,20 +370,9 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(1831, 77)" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df_final['SKU'] = df_final['SKU'].astype(str) \n", "df_final['PDV'] = df_final['PDV'].astype(str) \n", @@ -548,20 +382,9 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(1831, 82)" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "\n", "df_bi_preco['SKU2'] = df_bi_preco['SKU2'].astype(str).str.replace('.0','',regex=False) \n", @@ -572,20 +395,9 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(1831, 86)" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df_bi_preco['SKU1'] = df_bi_preco['SKU1'].astype(str).str.replace('.0','',regex=False) \n", "\n", @@ -595,7 +407,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -604,7 +416,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -616,7 +428,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -626,65 +438,16 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['PDV', 'Classe', 'SKU', 'Descrição', 'Categoria_x', 'Subcategoria',\n", - " 'Lançamento', 'Desativação', 'Histórico de Vendas do Ciclo 202408',\n", - " 'Histórico de Vendas do Ciclo 202409',\n", - " 'Histórico de Vendas do Ciclo 202410',\n", - " 'Histórico de Vendas do Ciclo 202411',\n", - " 'Histórico de Vendas do Ciclo 202412',\n", - " 'Histórico de Vendas do Ciclo 202413',\n", - " 'Histórico de Vendas do Ciclo 202414',\n", - " 'Histórico de Vendas do Ciclo 202415',\n", - " 'Histórico de Vendas do Ciclo 202416',\n", - " 'Histórico de Vendas do Ciclo 202417',\n", - " 'Histórico de Vendas do Ciclo 202501',\n", - " 'Histórico de Vendas do Ciclo 202502',\n", - " 'Histórico de Vendas do Ciclo 202503',\n", - " 'Histórico de Vendas do Ciclo 202504',\n", - " 'Histórico de Vendas do Ciclo 202505',\n", - " 'Histórico de Vendas do Ciclo 202506',\n", - " 'Histórico de Vendas do Ciclo 202507',\n", - " 'Histórico de Vendas do Ciclo Atual', 'Dias sem venda',\n", - " 'Projeção Próximo Ciclo', 'Projeção Próximo Ciclo + 1',\n", - " 'Promoção Próximo Ciclo', 'Promoção Próximo Ciclo + 1', 'Estoque Atual',\n", - " 'Estoque em Transito', 'Pedido Pendente',\n", - " 'Compra inteligente semanal/Sugestão de compra',\n", - " 'Compra inteligente Próximo Ciclo',\n", - " 'Compra inteligente Próximo Ciclo + 1', 'Item Desativado',\n", - " 'Data Prevista Regularização', 'Carteira Bloqueada Para Novos Pedidos',\n", - " 'Planograma', 'Quantidade por caixa', 'Preço Sell In', 'Quantidade',\n", - " 'Item analisado', 'Histórico de Vendas do Ciclo 202407', 'match',\n", - " 'Ciclo_x', 'Veiculo', 'Tipo de Promoção', 'Estratégia de Promoção',\n", - " 'Tipo_mecanica', 'Promo Período Limitado?', 'EAM', 'Categoria_y',\n", - " 'Cód. Combo', 'Código do Item', 'Descrição do Item',\n", - " 'Chamada Promocional', 'Valor do Guia', 'Preço Promocionado',\n", - " '% de Desconto', 'RE compra por', 'RE Vende por', 'RE lucra (R$)',\n", - " 'MATCH', 'UF', 'DESCRIÇÃO PDV', 'ANALISTA', 'Ciclo_y', 'INICIO CICLO',\n", - " 'FIM CICLO', 'DURAÇÃO', 'dias_ate_inicio', 'SKU_FINAL', 'DDV PREVISTO',\n", - " 'COBERTURA ATUAL', 'SKU1_x', 'SKU2_x', 'Tipo Preço', 'PC_x', 'PV_x',\n", - " 'SKU1_y', 'SKU2_y', 'PC_y', 'PV_y', 'PRECO DE COMPRA', 'PRECO DE VENDA',\n", - " 'SKU_PARA_VALIDACAO', 'Arquivo_Origem'],\n", - " dtype='object')" - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df_final.columns" ] }, { "cell_type": "code", - "execution_count": 37, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -704,20 +467,9 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(101091, 80)" - ] - }, - "execution_count": 38, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df_final['PDV_SKU'] = df_final['PDV'].astype(str) + df_final['SKU'].astype(str) \n", "df_final['UFPRODUTO'] = df_final['UF'].astype(str) + df_final['SKU'].astype(str)\n", @@ -727,39 +479,16 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Projeção Próximo Ciclo + 1\n", - "0 11230\n", - "1 6095\n", - "2 5693\n", - "4 5037\n", - "3 4691\n", - " ... \n", - "60 13\n", - "575 13\n", - "197 13\n", - "351 13\n", - "118 13\n", - "Name: count, Length: 129, dtype: int64" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df_final['Projeção Próximo Ciclo + 1'].value_counts()" ] }, { "cell_type": "code", - "execution_count": 40, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -768,39 +497,16 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "PROJEÇÃO DO CICLO PROMOCIONADO\n", - "0 11243\n", - "1 7913\n", - "2 7288\n", - "4 5839\n", - "5 5191\n", - " ... \n", - "175 13\n", - "312 13\n", - "108 13\n", - "69 13\n", - "161 13\n", - "Name: count, Length: 115, dtype: int64" - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df_final['PROJEÇÃO DO CICLO PROMOCIONADO'].value_counts()" ] }, { "cell_type": "code", - "execution_count": 42, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -809,7 +515,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -818,20 +524,9 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "np.int64(0)" - ] - }, - "execution_count": 44, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df_final = df_final[~df_final['MARCA'].isna()]\n", "df_final['MARCA'].isna().sum()" @@ -839,20 +534,9 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(1822, 81)" - ] - }, - "execution_count": 45, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df_final = df_final.drop_duplicates()\n", "df_final.shape" @@ -860,62 +544,16 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['PDV', 'Classe', 'SKU', 'Descrição', 'Categoria_x', 'Subcategoria',\n", - " 'Histórico de Vendas do Ciclo 202408',\n", - " 'Histórico de Vendas do Ciclo 202409',\n", - " 'Histórico de Vendas do Ciclo 202410',\n", - " 'Histórico de Vendas do Ciclo 202411',\n", - " 'Histórico de Vendas do Ciclo 202412',\n", - " 'Histórico de Vendas do Ciclo 202413',\n", - " 'Histórico de Vendas do Ciclo 202414',\n", - " 'Histórico de Vendas do Ciclo 202415',\n", - " 'Histórico de Vendas do Ciclo 202416',\n", - " 'Histórico de Vendas do Ciclo 202417',\n", - " 'Histórico de Vendas do Ciclo 202501',\n", - " 'Histórico de Vendas do Ciclo 202502',\n", - " 'Histórico de Vendas do Ciclo 202503',\n", - " 'Histórico de Vendas do Ciclo 202504',\n", - " 'Histórico de Vendas do Ciclo 202505',\n", - " 'Histórico de Vendas do Ciclo 202506',\n", - " 'Histórico de Vendas do Ciclo 202507',\n", - " 'Histórico de Vendas do Ciclo Atual', 'Dias sem venda',\n", - " 'Projeção Próximo Ciclo', 'Projeção Próximo Ciclo + 1', 'Estoque Atual',\n", - " 'Estoque em Transito', 'Pedido Pendente',\n", - " 'Compra inteligente Próximo Ciclo',\n", - " 'Compra inteligente Próximo Ciclo + 1', 'Item Desativado',\n", - " 'Data Prevista Regularização', 'Quantidade por caixa',\n", - " 'Histórico de Vendas do Ciclo 202407', 'match', 'Ciclo_x', 'Veiculo',\n", - " 'Tipo de Promoção', 'Estratégia de Promoção', 'Tipo_mecanica',\n", - " 'Promo Período Limitado?', 'EAM', 'Categoria_y', 'Cód. Combo',\n", - " 'Código do Item', 'Descrição do Item', 'Chamada Promocional',\n", - " 'Valor do Guia', 'Preço Promocionado', '% de Desconto', 'RE compra por',\n", - " 'RE Vende por', 'RE lucra (R$)', 'MATCH', 'UF', 'DESCRIÇÃO PDV',\n", - " 'ANALISTA', 'INICIO CICLO', 'FIM CICLO', 'DURAÇÃO', 'dias_ate_inicio',\n", - " 'SKU_FINAL', 'DDV PREVISTO', 'COBERTURA ATUAL', 'SKU1_x', 'SKU2_x',\n", - " 'Tipo Preço', 'PC_x', 'PV_x', 'SKU1_y', 'SKU2_y', 'PC_y', 'PV_y',\n", - " 'PRECO DE COMPRA', 'PRECO DE VENDA', 'MARCA', 'PDV_SKU', 'UFPRODUTO',\n", - " 'PROJEÇÃO DO CICLO PROMOCIONADO'],\n", - " dtype='object')" - ] - }, - "execution_count": 46, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df_final.columns" ] }, { "cell_type": "code", - "execution_count": 47, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -928,7 +566,7 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -939,54 +577,18 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['Histórico de Vendas do Ciclo 202408',\n", - " 'Histórico de Vendas do Ciclo 202409',\n", - " 'Histórico de Vendas do Ciclo 202410',\n", - " 'Histórico de Vendas do Ciclo 202411',\n", - " 'Histórico de Vendas do Ciclo 202412',\n", - " 'Histórico de Vendas do Ciclo 202413',\n", - " 'Histórico de Vendas do Ciclo 202414',\n", - " 'Histórico de Vendas do Ciclo 202415',\n", - " 'Histórico de Vendas do Ciclo 202416',\n", - " 'Histórico de Vendas do Ciclo 202417',\n", - " 'Histórico de Vendas do Ciclo 202501',\n", - " 'Histórico de Vendas do Ciclo 202502',\n", - " 'Histórico de Vendas do Ciclo 202503',\n", - " 'Histórico de Vendas do Ciclo 202504',\n", - " 'Histórico de Vendas do Ciclo 202505',\n", - " 'Histórico de Vendas do Ciclo 202506',\n", - " 'Histórico de Vendas do Ciclo 202507'],\n", - " dtype='object')" - ] - }, - "execution_count": 49, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df_final.columns[6:23]" ] }, { "cell_type": "code", - "execution_count": 50, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.167950276989596\n" - ] - } - ], + "outputs": [], "source": [ "CRESCIMENTO = (df_final[df_final.columns[6]].sum() - df_final[df_final.columns[22]].sum())/df_final[df_final.columns[6]].sum() \n", "print(CRESCIMENTO)\n", @@ -996,7 +598,7 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1007,27 +609,16 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'202410'" - ] - }, - "execution_count": 52, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df_final.columns[8:9].str.split(\" \")[0][-1]" ] }, { "cell_type": "code", - "execution_count": 53, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1042,68 +633,25 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "np.float64(0.167950276989596)" - ] - }, - "execution_count": 54, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "CRESCIMENTO" ] }, { "cell_type": "code", - "execution_count": 88, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['PDV', 'Classe', 'SKU', 'Descrição', 'Categoria_x', 'Subcategoria',\n", - " 'C-4', 'C-3', 'C-2', 'C-1', 'Histórico de Vendas do Ciclo 202507',\n", - " 'Histórico de Vendas do Ciclo Atual', 'Dias sem venda',\n", - " 'Projeção Próximo Ciclo', 'Projeção Próximo Ciclo + 1', 'Estoque Atual',\n", - " 'Estoque em Transito', 'Pedido Pendente',\n", - " 'Compra inteligente Próximo Ciclo',\n", - " 'Compra inteligente Próximo Ciclo + 1', 'Item Desativado',\n", - " 'Data Prevista Regularização', 'Quantidade por caixa',\n", - " 'Histórico de Vendas do Ciclo 202407', 'match', 'Ciclo_x', 'Veiculo',\n", - " 'Tipo de Promoção', 'Estratégia de Promoção', 'Tipo_mecanica',\n", - " 'Promo Período Limitado?', 'EAM', 'Categoria_y', 'Cód. Combo',\n", - " 'Código do Item', 'Descrição do Item', 'Chamada Promocional',\n", - " 'Valor do Guia', 'Preço Promocionado', '% de Desconto', 'RE compra por',\n", - " 'RE Vende por', 'RE lucra (R$)', 'MATCH', 'UF', 'DESCRIÇÃO PDV',\n", - " 'ANALISTA', 'INICIO CICLO', 'FIM CICLO', 'DURAÇÃO', 'dias_ate_inicio',\n", - " 'SKU_FINAL', 'DDV PREVISTO', 'COBERTURA ATUAL', 'SKU1_x', 'SKU2_x',\n", - " 'Tipo Preço', 'PC_x', 'PV_x', 'SKU1_y', 'SKU2_y', 'PC_y', 'PV_y',\n", - " 'PRECO DE COMPRA', 'PRECO DE VENDA', 'MARCA', 'PDV_SKU', 'UFPRODUTO',\n", - " 'PROJEÇÃO DO CICLO PROMOCIONADO', 'PICO DE VENDAS 2024',\n", - " 'Pico Vendas Ultimos 6 ciclos', 'CRESCIMENTO', '202410',\n", - " 'MEDIANA DO HISTÓRICO', 'MEDIA DO HISTÓRICO', 'PV GINSENG'],\n", - " dtype='object')" - ] - }, - "execution_count": 88, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df_final.columns" ] }, { "cell_type": "code", - "execution_count": 56, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1123,7 +671,7 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1132,7 +680,7 @@ }, { "cell_type": "code", - "execution_count": 58, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1141,7 +689,7 @@ }, { "cell_type": "code", - "execution_count": 59, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1159,38 +707,16 @@ }, { "cell_type": "code", - "execution_count": 60, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0 0\n", - "24 0\n", - "48 0\n", - "72 9\n", - "96 0\n", - " ..\n", - "101026 0\n", - "101039 2\n", - "101052 1\n", - "101065 1\n", - "101078 7\n", - "Name: Compra inteligente Próximo Ciclo, Length: 1822, dtype: int64" - ] - }, - "execution_count": 60, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df_final['Compra inteligente Próximo Ciclo']\n" ] }, { "cell_type": "code", - "execution_count": 61, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1199,7 +725,7 @@ }, { "cell_type": "code", - "execution_count": 62, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1212,39 +738,16 @@ }, { "cell_type": "code", - "execution_count": 63, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "DDV PREVISTO\n", - "0.01 302\n", - "0.02 120\n", - "0.04 109\n", - "0.07 50\n", - "0.13 36\n", - " ... \n", - "1.56 1\n", - "3.58 1\n", - "3.75 1\n", - "6.98 1\n", - "10.96 1\n", - "Name: count, Length: 195, dtype: int64" - ] - }, - "execution_count": 63, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df_final_dedup['DDV PREVISTO'].value_counts()" ] }, { "cell_type": "code", - "execution_count": 64, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1253,7 +756,7 @@ }, { "cell_type": "code", - "execution_count": 65, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1262,49 +765,16 @@ }, { "cell_type": "code", - "execution_count": 66, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['% de Desconto', '202410', 'ANALISTA', 'C-1', 'C-2', 'C-3', 'C-4',\n", - " 'CRESCIMENTO', 'Categoria_x', 'Categoria_y', 'Chamada Promocional',\n", - " 'Ciclo_x', 'Classe', 'Compra inteligente Próximo Ciclo',\n", - " 'Compra inteligente Próximo Ciclo + 1', 'Cód. Combo', 'Código do Item',\n", - " 'DESCRIÇÃO PDV', 'DURAÇÃO', 'Data Prevista Regularização', 'Descrição',\n", - " 'Descrição do Item', 'Dias sem venda', 'EAM', 'Estoque Atual',\n", - " 'Estoque em Transito', 'Estratégia de Promoção', 'FIM CICLO',\n", - " 'Histórico de Vendas do Ciclo 202407',\n", - " 'Histórico de Vendas do Ciclo 202507',\n", - " 'Histórico de Vendas do Ciclo Atual', 'INICIO CICLO', 'Item Desativado',\n", - " 'MARCA', 'MATCH', 'MEDIA DO HISTÓRICO', 'MEDIANA DO HISTÓRICO', 'PC_x',\n", - " 'PC_y', 'PDV', 'PDV_SKU', 'PICO DE VENDAS 2024', 'PRECO DE COMPRA',\n", - " 'PRECO DE VENDA', 'PROJEÇÃO DO CICLO PROMOCIONADO', 'PV GINSENG',\n", - " 'PV_x', 'PV_y', 'Pedido Pendente', 'Pico Vendas Ultimos 6 ciclos',\n", - " 'Preço Promocionado', 'Projeção Próximo Ciclo',\n", - " 'Projeção Próximo Ciclo + 1', 'Promo Período Limitado?',\n", - " 'Quantidade por caixa', 'RE Vende por', 'RE compra por',\n", - " 'RE lucra (R$)', 'SKU', 'SKU1_x', 'SKU1_y', 'SKU2_x', 'SKU2_y',\n", - " 'SKU_FINAL', 'Subcategoria', 'Tipo Preço', 'Tipo de Promoção',\n", - " 'Tipo_mecanica', 'UF', 'UFPRODUTO', 'Valor do Guia', 'Veiculo',\n", - " 'dias_ate_inicio', 'match', 'DDV PREVISTO', 'COBERTURA ATUAL',\n", - " 'EST PROJE FINAL CICLO ATUAL'],\n", - " dtype='object')" - ] - }, - "execution_count": 66, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df_final_dedup.columns" ] }, { "cell_type": "code", - "execution_count": 67, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1313,7 +783,7 @@ }, { "cell_type": "code", - "execution_count": 68, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1322,7 +792,7 @@ }, { "cell_type": "code", - "execution_count": 69, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1332,7 +802,7 @@ }, { "cell_type": "code", - "execution_count": 70, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1341,7 +811,7 @@ }, { "cell_type": "code", - "execution_count": 71, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1353,7 +823,7 @@ }, { "cell_type": "code", - "execution_count": 72, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1363,7 +833,7 @@ }, { "cell_type": "code", - "execution_count": 73, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1372,7 +842,7 @@ }, { "cell_type": "code", - "execution_count": 74, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1381,62 +851,18 @@ }, { "cell_type": "code", - "execution_count": 75, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['% de Desconto', '202410', 'ANALISTA', 'C-1', 'C-2', 'C-3', 'C-4',\n", - " 'Categoria_x', 'Categoria_y', 'Chamada Promocional', 'Ciclo', 'Classe',\n", - " 'Compra inteligente Próximo Ciclo',\n", - " 'Compra inteligente Próximo Ciclo + 1', 'Cód. Combo', 'Código do Item',\n", - " 'DESCRIÇÃO PDV', 'DURAÇÃO', 'Data Prevista Regularização', 'Descrição',\n", - " 'Descrição do Item', 'Dias sem venda', 'EAM', 'Estoque Atual',\n", - " 'Estoque em Transito', 'Estratégia de Promoção', 'FIM CICLO',\n", - " 'Histórico de Vendas do Ciclo 202407',\n", - " 'Histórico de Vendas do Ciclo 202507',\n", - " 'Histórico de Vendas do Ciclo Atual', 'INICIO CICLO', 'Item Desativado',\n", - " 'MARCA', 'MATCH', 'MEDIA DO HISTÓRICO', 'MEDIANA DO HISTÓRICO', 'PC_x',\n", - " 'PC_y', 'PDV', 'PDV_SKU', 'PICO DE VENDAS 2024', 'PRECO DE COMPRA',\n", - " 'PRECO DE VENDA', 'PROJEÇÃO DO CICLO PROMOCIONADO', 'PV GINSENG',\n", - " 'PV_x', 'PV_y', 'Pedido Pendente', 'Pico Vendas Ultimos 6 ciclos',\n", - " 'Preço Promocionado', 'Projeção Próximo Ciclo',\n", - " 'Promo Período Limitado?', 'Quantidade por caixa', 'RE Vende por',\n", - " 'RE compra por', 'RE lucra (R$)', 'SKU', 'SKU1_x', 'SKU1_y', 'SKU2_x',\n", - " 'SKU2_y', 'Subcategoria', 'Tipo Preço', 'Tipo de Promoção',\n", - " 'Tipo_mecanica', 'UF', 'UFPRODUTO', 'Valor do Guia', 'Veiculo', 'match',\n", - " 'DDV PREVISTO', 'COBERTURA ATUAL', 'EST PROJE FINAL CICLO ATUAL',\n", - " 'VENDAS R$ PV GINSENG', 'SUGESTÃO ABTASTECIMENTO\\t',\n", - " 'VENDAS R$ ABASTECIMENTO', 'RBV 202406', 'COB PROJETADA'],\n", - " dtype='object')" - ] - }, - "execution_count": 75, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df_final_dedup.columns" ] }, { "cell_type": "code", - "execution_count": 76, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'EUD'" - ] - }, - "execution_count": 76, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "marca_promo = df_estoque['Arquivo_Origem'].iloc[0].replace('.csv','')\n", "marca_promo" @@ -1444,48 +870,16 @@ }, { "cell_type": "code", - "execution_count": 77, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['PDV', 'Classe', 'SKU', 'Descrição', 'Categoria_x', 'Subcategoria',\n", - " 'C-4', 'C-3', 'C-2', 'C-1', 'Histórico de Vendas do Ciclo 202507',\n", - " 'Histórico de Vendas do Ciclo Atual', 'Dias sem venda',\n", - " 'Projeção Próximo Ciclo', 'Projeção Próximo Ciclo + 1', 'Estoque Atual',\n", - " 'Estoque em Transito', 'Pedido Pendente',\n", - " 'Compra inteligente Próximo Ciclo',\n", - " 'Compra inteligente Próximo Ciclo + 1', 'Item Desativado',\n", - " 'Data Prevista Regularização', 'Quantidade por caixa',\n", - " 'Histórico de Vendas do Ciclo 202407', 'match', 'Ciclo_x', 'Veiculo',\n", - " 'Tipo de Promoção', 'Estratégia de Promoção', 'Tipo_mecanica',\n", - " 'Promo Período Limitado?', 'EAM', 'Categoria_y', 'Cód. Combo',\n", - " 'Código do Item', 'Descrição do Item', 'Chamada Promocional',\n", - " 'Valor do Guia', 'Preço Promocionado', '% de Desconto', 'RE compra por',\n", - " 'RE Vende por', 'RE lucra (R$)', 'MATCH', 'UF', 'DESCRIÇÃO PDV',\n", - " 'ANALISTA', 'INICIO CICLO', 'FIM CICLO', 'DURAÇÃO', 'dias_ate_inicio',\n", - " 'SKU_FINAL', 'DDV PREVISTO', 'COBERTURA ATUAL', 'SKU1_x', 'SKU2_x',\n", - " 'Tipo Preço', 'PC_x', 'PV_x', 'SKU1_y', 'SKU2_y', 'PC_y', 'PV_y',\n", - " 'PRECO DE COMPRA', 'PRECO DE VENDA', 'MARCA', 'PDV_SKU', 'UFPRODUTO',\n", - " 'PROJEÇÃO DO CICLO PROMOCIONADO', 'PICO DE VENDAS 2024',\n", - " 'Pico Vendas Ultimos 6 ciclos', 'CRESCIMENTO', '202410',\n", - " 'MEDIANA DO HISTÓRICO', 'MEDIA DO HISTÓRICO', 'PV GINSENG'],\n", - " dtype='object')" - ] - }, - "execution_count": 77, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df_final.columns" ] }, { "cell_type": "code", - "execution_count": 78, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1527,7 +921,7 @@ }, { "cell_type": "code", - "execution_count": 79, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1553,7 +947,7 @@ }, { "cell_type": "code", - "execution_count": 80, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1564,49 +958,16 @@ }, { "cell_type": "code", - "execution_count": 81, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['PDV_SKU', 'SKU', 'MARCA', 'INICIO CICLO', 'FIM CICLO', 'DURAÇÃO',\n", - " 'dias_ate_inicio', 'UFPRODUTO', 'Item Desativado',\n", - " 'Data Prevista Regularização', 'ANALISTA', 'UF', 'PDV', 'DESCRIÇÃO PDV',\n", - " 'Classe', 'Descrição', 'MECÂNICA 1', 'MECÂNICA 2', 'MECÂNICA 3',\n", - " 'Estoque Atual', 'COBERTURA ATUAL', 'Estoque em Transito',\n", - " 'Pedido Pendente', 'PICO DE VENDAS 2024',\n", - " 'Pico Vendas Ultimos 6 ciclos', 'C-4', 'C-3', 'C-2', 'C-1',\n", - " 'Histórico de Vendas do Ciclo Atual', 'Dias sem venda', 'Categoria_x',\n", - " 'Subcategoria', 'Histórico de Vendas do Ciclo 202507',\n", - " 'Projeção Próximo Ciclo', 'Projeção Próximo Ciclo + 1',\n", - " 'Compra inteligente Próximo Ciclo',\n", - " 'Compra inteligente Próximo Ciclo + 1', 'Quantidade por caixa',\n", - " 'Histórico de Vendas do Ciclo 202407', 'match', 'Ciclo_x', 'Veiculo',\n", - " 'Tipo de Promoção', 'Estratégia de Promoção', 'Tipo_mecanica',\n", - " 'Promo Período Limitado?', 'EAM', 'Categoria_y', 'Cód. Combo',\n", - " 'Código do Item', 'Descrição do Item', 'Chamada Promocional',\n", - " 'Valor do Guia', 'Preço Promocionado', '% de Desconto', 'RE compra por',\n", - " 'RE Vende por', 'RE lucra (R$)', 'MATCH', 'SKU_FINAL', 'DDV PREVISTO',\n", - " 'SKU1_x', 'SKU2_x', 'Tipo Preço', 'PC_x', 'PV_x', 'SKU1_y', 'SKU2_y',\n", - " 'PC_y', 'PV_y', 'PRECO DE COMPRA', 'PRECO DE VENDA',\n", - " 'PROJEÇÃO DO CICLO PROMOCIONADO', 'CRESCIMENTO', '202410',\n", - " 'MEDIANA DO HISTÓRICO', 'MEDIA DO HISTÓRICO', 'PV GINSENG'],\n", - " dtype='object')" - ] - }, - "execution_count": 81, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df_merged.columns" ] }, { "cell_type": "code", - "execution_count": 82, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1615,7 +976,7 @@ }, { "cell_type": "code", - "execution_count": 83, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1624,7 +985,7 @@ }, { "cell_type": "code", - "execution_count": 84, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1635,7 +996,7 @@ }, { "cell_type": "code", - "execution_count": 85, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1646,7 +1007,7 @@ }, { "cell_type": "code", - "execution_count": 87, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ diff --git a/promoção/promoção_boti_ciclo07.ipynb b/promoção/promoção_boti_ciclo07.ipynb index a9f7606..ad04e7a 100644 --- a/promoção/promoção_boti_ciclo07.ipynb +++ b/promoção/promoção_boti_ciclo07.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 101, "metadata": {}, "outputs": [], "source": [ @@ -17,7 +17,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 102, "metadata": {}, "outputs": [], "source": [ @@ -26,7 +26,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 103, "metadata": {}, "outputs": [], "source": [ @@ -44,11 +44,11 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 104, "metadata": {}, "outputs": [], "source": [ - "df_tabela = pd.read_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\DB_PROMOÇÕES\\BOTICARIO\\C10\\TABELA DE PEDIDOS\\Pedidos Semanais Especiais - BOT - 202510.xlsx\")\n", + "df_tabela = pd.read_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\DB_PROMOÇÕES\\BOTICARIO\\C11\\TABELA DE PEDIDOS\\Pedidos Semanais Especiais - BOT - 202511 (1).xlsx\")\n", "\n", "df_tabela = df_tabela[df_tabela['Ação revendedor'].notna() | df_tabela['Ação consumidor'].notna()]\n", "\n", @@ -76,43 +76,36 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 105, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "Index(['Ciclo', 'Região', 'Canal', 'Código', 'Descrição', 'IAF',\n", - " 'Tipo de pedido', 'Foco', 'Unidade de negócio', 'Marca', 'Categoria',\n", - " 'Subcategoria', 'Quantidade por caixa', 'Tipo de promoção', 'Catálogo',\n", - " 'Tipo de produto', 'Ação consumidor',\n", - " 'Percentual de desconto consumidor', 'Ação revendedor',\n", - " 'Percentual de desconto revendedor', 'Sortimento P', 'Sortimento M',\n", - " 'Sortimento G', 'MATCH'],\n", - " dtype='object')" + "(332,)" ] }, - "execution_count": 5, + "execution_count": 105, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "df_tabela.columns" + "df_tabela['Código'].shape" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 106, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "(702, 24)" + "(332, 24)" ] }, - "execution_count": 6, + "execution_count": 106, "metadata": {}, "output_type": "execute_result" } @@ -123,17 +116,17 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 107, "metadata": {}, "outputs": [], "source": [ - "df_pdv = pd.read_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\DB_PROMOÇÕES\\BOTICARIO\\C09\\arquivos pra gerar\\pdvs\\PDV_ATT.xlsx\")\n", + "df_pdv = pd.read_excel(r\"C:\\Users\\joao.herculano\\Documents\\PDV_ATT.xlsx\")\n", "\n", - "df_pdv_origi = pd.read_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\DB_PROMOÇÕES\\BOTICARIO\\C09\\arquivos pra gerar\\pdvs\\PDV_ATT.xlsx\")\n", + "df_pdv_origi = pd.read_excel(r\"C:\\Users\\joao.herculano\\Documents\\PDV_ATT.xlsx\")\n", "\n", "df_pdv = df_pdv.rename(columns={'DESCRIÇÃO':'DESCRIÇÃO PDV'})\n", "\n", - "df_pdv = df_pdv[df_pdv['STATUS']!=\"INATIVO\"]\n", + "df_pdv = df_pdv[df_pdv['GESTÃO']!=\"Inativa\"]\n", "\n", "df_pdv = df_pdv.drop(columns=['REGIÃO', 'ESTADO','CIDADE','GESTÃO', 'STATUS'])\n", "\n", @@ -149,7 +142,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 108, "metadata": {}, "outputs": [], "source": [ @@ -158,24 +151,24 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 109, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "C:\\Users\\joao.herculano\\AppData\\Local\\Temp\\ipykernel_54556\\4129764549.py:10: DtypeWarning: Columns (7) have mixed types. Specify dtype option on import or set low_memory=False.\n", + "C:\\Users\\joao.herculano\\AppData\\Local\\Temp\\ipykernel_17756\\3645011820.py:10: DtypeWarning: Columns (6,7) have mixed types. Specify dtype option on import or set low_memory=False.\n", " df_draft = pd.concat([pd.read_csv(file) for file in csv_files], ignore_index=True)\n" ] }, { "data": { "text/plain": [ - "(114430, 46)" + "(127198, 46)" ] }, - "execution_count": 9, + "execution_count": 109, "metadata": {}, "output_type": "execute_result" } @@ -184,7 +177,7 @@ "# Caminho onde estão as subpastas com os arquivos CSV\n", "\n", "# Set the path to the folder containing CSV files\n", - "folder_path = r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\BD_LANÇAMENTOS\\BOT\\BOT - C11\\atualização\\DRAFT_\" # arquivo dos drafts\n", + "folder_path = r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\DB_PROMOÇÕES\\BOTICARIO\\C11\\DRAFT_PDVS_SEM_\" # arquivo dos drafts\n", "\n", "# Pattern to match all CSV files\n", "csv_files = glob.glob(os.path.join(folder_path, '*.csv'))\n", @@ -197,7 +190,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 110, "metadata": {}, "outputs": [], "source": [ @@ -211,14 +204,14 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 111, "metadata": {}, "outputs": [], "source": [ "\n", "\n", "# Caminho onde estão as subpastas com os arquivos CSV\n", - "pasta_entrada = r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\BD_LANÇAMENTOS\\BOT\\BOT - C11\\atualização\\estoque\"\n", + "pasta_entrada = r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\DB_PROMOÇÕES\\BOTICARIO\\C11\\estoque\"\n", "\n", "# Lista todas as subpastas dentro de \"ESTOQUE\"\n", "subpastas = [os.path.join(pasta_entrada, d) for d in os.listdir(pasta_entrada) if os.path.isdir(os.path.join(pasta_entrada, d))]\n", @@ -252,7 +245,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 112, "metadata": {}, "outputs": [ { @@ -268,7 +261,7 @@ " dtype='object')" ] }, - "execution_count": 12, + "execution_count": 112, "metadata": {}, "output_type": "execute_result" } @@ -279,11 +272,100 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 113, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(332, 24)" + ] + }, + "execution_count": 113, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_tabela.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 114, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Canal\n", + "Todos 183\n", + "Loja 72\n", + "VD 67\n", + "Loja | VD 6\n", + "Ecomm | VD 2\n", + "Ecomm | Loja 2\n", + "Name: count, dtype: int64" + ] + }, + "execution_count": 114, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_tabela['Canal'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ - "df_tabela = pd.merge(left=df_tabela,right=df_estoque[['SKU','SKU_FINAL']],left_on='Código',right_on='SKU',how='inner')\n", + "df_estoque['SKU_FINAL'] = df_estoque['SKU_FINAL'].astype('Int64')" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "df_tabela = pd.merge(left=df_tabela,right=df_estoque[['SKU','SKU_FINAL']],left_on='Código',right_on='SKU',how='left')\n", + "\n", + "df_tabela['Código'] = df_tabela['SKU_FINAL']\n", + "\n", + "df_tabela = df_tabela.drop(columns=['SKU','SKU_FINAL'])" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "315" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_tabela['Código'].nunique()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "df_tabela = pd.merge(left=df_tabela,right=df_estoque[['SKU','SKU_FINAL']],left_on='Código',right_on='SKU_FINAL',how='left')\n", "\n", "df_tabela['Código'] = df_tabela['SKU_FINAL']\n", "\n", @@ -293,7 +375,461 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "df_tabela = df_tabela.drop_duplicates()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "df_tabela.to_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\DB_PROMOÇÕES\\BOTICARIO\\C11\\teste.xlsx\",index=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CicloRegiãoCanalCódigoDescriçãoIAFTipo de pedidoFocoUnidade de negócioMarca...CatálogoTipo de produtoAção consumidorPercentual de desconto consumidorAção revendedorPercentual de desconto revendedorSortimento PSortimento MSortimento GMATCH
0202511NNEVD74438ARBO DES COL 100ml V4NãoSemanalNãoBOTARBO...SimREGULARNaN0,00VD - FAVORITOS PARA INÍCIOS ARBO - C1135,00SortidoSortidoSortido1
7440202511NNEVD57210AU MIGOS PETS BANHO SECO ADULTOS 240mlNãoSemanalNãoBOTAU.MIGOS PETS...SimREGULARNaN0,00VD - LUCRATIVIDADE BASE AUMIGOS - BRONZE | VD ...10,00 | 13,00 | 15,00 | 17,00 | 19,00 | 20,00 ...SortidoSortidoSortido1
12624202511NNEVD57211AU MIGOS PETS COL ADULTOS 60mlNãoSemanalNãoBOTAU.MIGOS PETS...SimREGULARNaN0,00VD - LUCRATIVIDADE BASE AUMIGOS - BRONZE | VD ...10,00 | 13,00 | 15,00 | 17,00 | 19,00 | 20,00 ...SortidoSortidoSortido1
17953202511NNEVD57209AU MIGOS PETS COL FILHOTES 60mlNãoSemanalNãoBOTAU.MIGOS PETS...SimREGULARNaN0,00VD - LUCRATIVIDADE BASE AUMIGOS - BRONZE | VD ...10,00 | 13,00 | 15,00 | 17,00 | 19,00 | 20,00 ...SortidoSortidoSortido1
23578202511NNEVD57208AU MIGOS PETS COND ADULTOS 400mlNãoSemanalNãoBOTAU.MIGOS PETS...SimREGULARNaN0,00VD - LUCRATIVIDADE BASE AUMIGOS - BRONZE | VD ...10,00 | 13,00 | 15,00 | 17,00 | 19,00 | 20,00 ...SortidoSortidoSortido1
..................................................................
1918086202511NNELoja55477SCH BOTIK SERUM FAC RESV/SILICIO VDA 2mlNãoSemanalNãoBOTBOTIK...SimREGULAR[BOT] AÇÃO DE FLUXO BOTIK CICACERAMIDAS COM DE...10,00[BOT] AÇÃO DE FLUXO BOTIK CICACERAMIDAS COM DE...0,00SortidoSortidoSortido1
1918662202511NNEEcomm | VD83961ARBO DES BDY SPR 100ml V6NãoSemanalNãoBOTARBO...SimREGULAR[ECOMM] PAIS 2025 - COMBO ARBO - NNE21,49VD - FAVORITOS PARA INÍCIOS BODY SPRAY ARBO - C1135,00SortidoSortidoSortido1
1926362202511NNEEcomm | VD73614COFFEE DES COL DUO MAN 100mlNãoSemanalNãoBOTCOFFEE...SimREGULAR[ECOMM] PAIS 2025 - COMBO COFFEE E BOTMEN18,67VD - COFFEE PERFUMARIA MASCULINA - LUCRO EXTRA...20,00 | 25,00 | 30,00SortidoSortidoSortido1
1931987202511NNEEcomm | Loja52948NSPA CREM ESF CPO AMEI DOUR 200gNãoSemanalNãoBOTNATIVA SPA...SimREGULAR[LOJA/ECOMM] ITENS SELECIONADOS DE NATIVA SPA ...7,82[LOJA/ECOMM] ITENS SELECIONADOS DE NATIVA SPA ...0,00Não sortidoSortidoSortido1
1937171202511NNEEcomm | Loja58987NSPA OL BIF DES HID CPO UVA MERL 200mlNãoSemanalNãoBOTNATIVA SPA...SimREGULAR[LOJA/ECOMM] ITENS SELECIONADOS DE NATIVA SPA ...14,88[LOJA/ECOMM] ITENS SELECIONADOS DE NATIVA SPA ...0,00SortidoSortidoSortido1
\n", + "

332 rows × 24 columns

\n", + "
" + ], + "text/plain": [ + " Ciclo Região Canal Código \\\n", + "0 202511 NNE VD 74438 \n", + "7440 202511 NNE VD 57210 \n", + "12624 202511 NNE VD 57211 \n", + "17953 202511 NNE VD 57209 \n", + "23578 202511 NNE VD 57208 \n", + "... ... ... ... ... \n", + "1918086 202511 NNE Loja 55477 \n", + "1918662 202511 NNE Ecomm | VD 83961 \n", + "1926362 202511 NNE Ecomm | VD 73614 \n", + "1931987 202511 NNE Ecomm | Loja 52948 \n", + "1937171 202511 NNE Ecomm | Loja 58987 \n", + "\n", + " Descrição IAF Tipo de pedido Foco \\\n", + "0 ARBO DES COL 100ml V4 Não Semanal Não \n", + "7440 AU MIGOS PETS BANHO SECO ADULTOS 240ml Não Semanal Não \n", + "12624 AU MIGOS PETS COL ADULTOS 60ml Não Semanal Não \n", + "17953 AU MIGOS PETS COL FILHOTES 60ml Não Semanal Não \n", + "23578 AU MIGOS PETS COND ADULTOS 400ml Não Semanal Não \n", + "... ... ... ... ... \n", + "1918086 SCH BOTIK SERUM FAC RESV/SILICIO VDA 2ml Não Semanal Não \n", + "1918662 ARBO DES BDY SPR 100ml V6 Não Semanal Não \n", + "1926362 COFFEE DES COL DUO MAN 100ml Não Semanal Não \n", + "1931987 NSPA CREM ESF CPO AMEI DOUR 200g Não Semanal Não \n", + "1937171 NSPA OL BIF DES HID CPO UVA MERL 200ml Não Semanal Não \n", + "\n", + " Unidade de negócio Marca ... Catálogo Tipo de produto \\\n", + "0 BOT ARBO ... Sim REGULAR \n", + "7440 BOT AU.MIGOS PETS ... Sim REGULAR \n", + "12624 BOT AU.MIGOS PETS ... Sim REGULAR \n", + "17953 BOT AU.MIGOS PETS ... Sim REGULAR \n", + "23578 BOT AU.MIGOS PETS ... Sim REGULAR \n", + "... ... ... ... ... ... \n", + "1918086 BOT BOTIK ... Sim REGULAR \n", + "1918662 BOT ARBO ... Sim REGULAR \n", + "1926362 BOT COFFEE ... Sim REGULAR \n", + "1931987 BOT NATIVA SPA ... Sim REGULAR \n", + "1937171 BOT NATIVA SPA ... Sim REGULAR \n", + "\n", + " Ação consumidor \\\n", + "0 NaN \n", + "7440 NaN \n", + "12624 NaN \n", + "17953 NaN \n", + "23578 NaN \n", + "... ... \n", + "1918086 [BOT] AÇÃO DE FLUXO BOTIK CICACERAMIDAS COM DE... \n", + "1918662 [ECOMM] PAIS 2025 - COMBO ARBO - NNE \n", + "1926362 [ECOMM] PAIS 2025 - COMBO COFFEE E BOTMEN \n", + "1931987 [LOJA/ECOMM] ITENS SELECIONADOS DE NATIVA SPA ... \n", + "1937171 [LOJA/ECOMM] ITENS SELECIONADOS DE NATIVA SPA ... \n", + "\n", + " Percentual de desconto consumidor \\\n", + "0 0,00 \n", + "7440 0,00 \n", + "12624 0,00 \n", + "17953 0,00 \n", + "23578 0,00 \n", + "... ... \n", + "1918086 10,00 \n", + "1918662 21,49 \n", + "1926362 18,67 \n", + "1931987 7,82 \n", + "1937171 14,88 \n", + "\n", + " Ação revendedor \\\n", + "0 VD - FAVORITOS PARA INÍCIOS ARBO - C11 \n", + "7440 VD - LUCRATIVIDADE BASE AUMIGOS - BRONZE | VD ... \n", + "12624 VD - LUCRATIVIDADE BASE AUMIGOS - BRONZE | VD ... \n", + "17953 VD - LUCRATIVIDADE BASE AUMIGOS - BRONZE | VD ... \n", + "23578 VD - LUCRATIVIDADE BASE AUMIGOS - BRONZE | VD ... \n", + "... ... \n", + "1918086 [BOT] AÇÃO DE FLUXO BOTIK CICACERAMIDAS COM DE... \n", + "1918662 VD - FAVORITOS PARA INÍCIOS BODY SPRAY ARBO - C11 \n", + "1926362 VD - COFFEE PERFUMARIA MASCULINA - LUCRO EXTRA... \n", + "1931987 [LOJA/ECOMM] ITENS SELECIONADOS DE NATIVA SPA ... \n", + "1937171 [LOJA/ECOMM] ITENS SELECIONADOS DE NATIVA SPA ... \n", + "\n", + " Percentual de desconto revendedor Sortimento P \\\n", + "0 35,00 Sortido \n", + "7440 10,00 | 13,00 | 15,00 | 17,00 | 19,00 | 20,00 ... Sortido \n", + "12624 10,00 | 13,00 | 15,00 | 17,00 | 19,00 | 20,00 ... Sortido \n", + "17953 10,00 | 13,00 | 15,00 | 17,00 | 19,00 | 20,00 ... Sortido \n", + "23578 10,00 | 13,00 | 15,00 | 17,00 | 19,00 | 20,00 ... Sortido \n", + "... ... ... \n", + "1918086 0,00 Sortido \n", + "1918662 35,00 Sortido \n", + "1926362 20,00 | 25,00 | 30,00 Sortido \n", + "1931987 0,00 Não sortido \n", + "1937171 0,00 Sortido \n", + "\n", + " Sortimento M Sortimento G MATCH \n", + "0 Sortido Sortido 1 \n", + "7440 Sortido Sortido 1 \n", + "12624 Sortido Sortido 1 \n", + "17953 Sortido Sortido 1 \n", + "23578 Sortido Sortido 1 \n", + "... ... ... ... \n", + "1918086 Sortido Sortido 1 \n", + "1918662 Sortido Sortido 1 \n", + "1926362 Sortido Sortido 1 \n", + "1931987 Sortido Sortido 1 \n", + "1937171 Sortido Sortido 1 \n", + "\n", + "[332 rows x 24 columns]" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_tabela" + ] + }, + { + "cell_type": "code", + "execution_count": 21, "metadata": {}, "outputs": [], "source": [ @@ -305,7 +841,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 22, "metadata": {}, "outputs": [ { @@ -345,73 +881,73 @@ " \n", " \n", " 0\n", - " 90495\n", + " 94394\n", " -\n", - " 20005\n", - " 100.0\n", + " 20968\n", + " 0.0\n", " 0.0\n", " 0.0\n", " NaN\n", " NaN\n", " NaN\n", " BOT.csv\n", - " 90495\n", + " 94394\n", " \n", " \n", " 1\n", - " 90246\n", + " 94394\n", " -\n", - " 4560\n", + " 20969\n", + " 0.0\n", " 0.0\n", - " NaN\n", " 0.0\n", " NaN\n", " NaN\n", " NaN\n", " BOT.csv\n", - " 90246\n", + " 94394\n", " \n", " \n", " 2\n", - " 90246\n", + " 94394\n", " -\n", - " 5699\n", + " 20970\n", + " 0.0\n", " 0.0\n", - " NaN\n", " 0.0\n", " NaN\n", " NaN\n", " NaN\n", " BOT.csv\n", - " 90246\n", + " 94394\n", " \n", " \n", " 3\n", - " 90246\n", + " 94394\n", " -\n", - " 12522\n", + " 20986\n", + " 0.0\n", " 0.0\n", - " NaN\n", " 0.0\n", " NaN\n", " NaN\n", " NaN\n", " BOT.csv\n", - " 90246\n", + " 94394\n", " \n", " \n", " 4\n", - " 90246\n", + " 94394\n", " -\n", - " 12817\n", + " 20988\n", + " 0.0\n", " 0.0\n", - " NaN\n", " 0.0\n", " NaN\n", " NaN\n", " NaN\n", " BOT.csv\n", - " 90246\n", + " 94394\n", " \n", " \n", " ...\n", @@ -428,10 +964,24 @@ " ...\n", " \n", " \n", - " 441216\n", - " 1594\n", + " 454599\n", + " 4438\n", " -\n", - " 20995\n", + " 910291\n", + " 9.0\n", + " 10.0\n", + " 0.0\n", + " 0.78\n", + " 11.0\n", + " 24.0\n", + " QDB.csv\n", + " 4438\n", + " \n", + " \n", + " 454600\n", + " 4431\n", + " -\n", + " 21007\n", " 0.0\n", " 0.0\n", " 0.0\n", @@ -439,56 +989,42 @@ " NaN\n", " NaN\n", " QDB.csv\n", - " 1594\n", + " 4431\n", " \n", " \n", - " 441217\n", - " 1594\n", + " 454601\n", + " 4431\n", " -\n", - " 20998\n", + " 910173\n", + " 2.0\n", + " 10.0\n", " 0.0\n", - " 0.0\n", - " 0.0\n", - " NaN\n", - " NaN\n", - " NaN\n", + " 0.40\n", + " 5.0\n", + " 30.0\n", " QDB.csv\n", - " 1594\n", + " 4431\n", " \n", " \n", - " 441218\n", - " 1594\n", + " 454602\n", + " 4431\n", " -\n", - " 21001\n", + " 910291\n", + " 1.0\n", + " 10.0\n", " 0.0\n", - " 0.0\n", - " 0.0\n", - " NaN\n", - " NaN\n", - " NaN\n", + " 0.78\n", + " 1.0\n", + " 14.0\n", " QDB.csv\n", - " 1594\n", + " 4431\n", " \n", " \n", - " 441219\n", + " 454603\n", " 1594\n", " -\n", - " 21278\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " NaN\n", - " NaN\n", - " NaN\n", - " QDB.csv\n", - " 1594\n", - " \n", - " \n", - " 441220\n", - " 1594\n", - " -\n", - " 21383\n", - " 0.0\n", + " 21007\n", + " 2.0\n", " 0.0\n", " 0.0\n", " NaN\n", @@ -499,22 +1035,22 @@ " \n", " \n", "\n", - "

441221 rows × 11 columns

\n", + "

454604 rows × 11 columns

\n", "" ], "text/plain": [ - " SKU SKU_PARA PDV ESTOQUE ATUAL ESTOQUE EM TRANSITO \\\n", - "0 90495 - 20005 100.0 0.0 \n", - "1 90246 - 4560 0.0 NaN \n", - "2 90246 - 5699 0.0 NaN \n", - "3 90246 - 12522 0.0 NaN \n", - "4 90246 - 12817 0.0 NaN \n", - "... ... ... ... ... ... \n", - "441216 1594 - 20995 0.0 0.0 \n", - "441217 1594 - 20998 0.0 0.0 \n", - "441218 1594 - 21001 0.0 0.0 \n", - "441219 1594 - 21278 0.0 0.0 \n", - "441220 1594 - 21383 0.0 0.0 \n", + " SKU SKU_PARA PDV ESTOQUE ATUAL ESTOQUE EM TRANSITO \\\n", + "0 94394 - 20968 0.0 0.0 \n", + "1 94394 - 20969 0.0 0.0 \n", + "2 94394 - 20970 0.0 0.0 \n", + "3 94394 - 20986 0.0 0.0 \n", + "4 94394 - 20988 0.0 0.0 \n", + "... ... ... ... ... ... \n", + "454599 4438 - 910291 9.0 10.0 \n", + "454600 4431 - 21007 0.0 0.0 \n", + "454601 4431 - 910173 2.0 10.0 \n", + "454602 4431 - 910291 1.0 10.0 \n", + "454603 1594 - 21007 2.0 0.0 \n", "\n", " PEDIDO PENDENTE DDV PREVISTO COBERTURA ATUAL \\\n", "0 0.0 NaN NaN \n", @@ -523,29 +1059,29 @@ "3 0.0 NaN NaN \n", "4 0.0 NaN NaN \n", "... ... ... ... \n", - "441216 0.0 NaN NaN \n", - "441217 0.0 NaN NaN \n", - "441218 0.0 NaN NaN \n", - "441219 0.0 NaN NaN \n", - "441220 0.0 NaN NaN \n", + "454599 0.0 0.78 11.0 \n", + "454600 0.0 NaN NaN \n", + "454601 0.0 0.40 5.0 \n", + "454602 0.0 0.78 1.0 \n", + "454603 0.0 NaN NaN \n", "\n", - " COBERTURA ATUAL + TRANSITO Arquivo_Origem SKU_FINAL \n", - "0 NaN BOT.csv 90495 \n", - "1 NaN BOT.csv 90246 \n", - "2 NaN BOT.csv 90246 \n", - "3 NaN BOT.csv 90246 \n", - "4 NaN BOT.csv 90246 \n", - "... ... ... ... \n", - "441216 NaN QDB.csv 1594 \n", - "441217 NaN QDB.csv 1594 \n", - "441218 NaN QDB.csv 1594 \n", - "441219 NaN QDB.csv 1594 \n", - "441220 NaN QDB.csv 1594 \n", + " COBERTURA ATUAL + TRANSITO Arquivo_Origem SKU_FINAL \n", + "0 NaN BOT.csv 94394 \n", + "1 NaN BOT.csv 94394 \n", + "2 NaN BOT.csv 94394 \n", + "3 NaN BOT.csv 94394 \n", + "4 NaN BOT.csv 94394 \n", + "... ... ... ... \n", + "454599 24.0 QDB.csv 4438 \n", + "454600 NaN QDB.csv 4431 \n", + "454601 30.0 QDB.csv 4431 \n", + "454602 14.0 QDB.csv 4431 \n", + "454603 NaN QDB.csv 1594 \n", "\n", - "[441221 rows x 11 columns]" + "[454604 rows x 11 columns]" ] }, - "execution_count": 15, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -556,7 +1092,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 23, "metadata": {}, "outputs": [ { @@ -569,7 +1105,7 @@ } ], "source": [ - "df_bi_preco = pd.read_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\DB_PROMOÇÕES\\BOTICARIO\\C09\\arquivos pra gerar\\preços bi\\TABELA DE PREÇOS (4).xlsx\")\n", + "df_bi_preco = pd.read_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\DB_PROMOÇÕES\\BOTICARIO\\C11\\preço BI\\TABELA DE PREÇOS (2).xlsx\")\n", "\n", "df_bi_preco = df_bi_preco.drop(columns=['Descrição','Tipo Preço','CATEGORIA','LINHA','MARCA'])\n", "\n" @@ -577,22 +1113,22 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "(44744, 31)" + "(25232, 31)" ] }, - "execution_count": 17, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "df_final = pd.merge(left=df_tabela,right=df_pdv,on='MATCH',how='inner')\n", + "df_final = pd.merge(left=df_tabela,right=df_pdv,on='MATCH',how='left')\n", "\n", "df_final = df_final.drop_duplicates()\n", "\n", @@ -601,16 +1137,16 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "(44744, 62)" + "(25232, 62)" ] }, - "execution_count": 18, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } @@ -626,17 +1162,16 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "26447 2.0\n", - "Name: Histórico de Vendas do Ciclo 202505, dtype: float64" + "Series([], Name: Histórico de Vendas do Ciclo 202505, dtype: float64)" ] }, - "execution_count": 19, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } @@ -647,7 +1182,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 27, "metadata": {}, "outputs": [], "source": [ @@ -657,7 +1192,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 28, "metadata": {}, "outputs": [], "source": [ @@ -666,7 +1201,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 29, "metadata": {}, "outputs": [], "source": [ @@ -689,7 +1224,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 30, "metadata": {}, "outputs": [ { @@ -726,16 +1261,16 @@ " \n", " \n", " \n", - " 2199\n", - " C202510\n", - " 2025-06-30\n", - " 2025-07-20\n", + " 2241\n", + " C202511\n", + " 2025-07-21\n", + " 2025-08-10\n", " 21\n", - " 2025-06-30\n", - " 10\n", + " 2025-07-21\n", + " 11\n", " C2025\n", - " C202512\n", - " 26\n", + " C202513\n", + " 38\n", " \n", " \n", "\n", @@ -743,13 +1278,13 @@ ], "text/plain": [ " Ciclo INICIO CICLO FIM CICLO DURAÇÃO Date NUM_CICLO \\\n", - "2199 C202510 2025-06-30 2025-07-20 21 2025-06-30 10 \n", + "2241 C202511 2025-07-21 2025-08-10 21 2025-07-21 11 \n", "\n", " ANO_CICLO CICLOMAIS2 dias_ate_inicio \n", - "2199 C2025 C202512 26 " + "2241 C2025 C202513 38 " ] }, - "execution_count": 23, + "execution_count": 30, "metadata": {}, "output_type": "execute_result" } @@ -786,7 +1321,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 31, "metadata": {}, "outputs": [], "source": [ @@ -795,7 +1330,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 32, "metadata": {}, "outputs": [], "source": [ @@ -804,7 +1339,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 33, "metadata": {}, "outputs": [], "source": [ @@ -813,7 +1348,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 34, "metadata": {}, "outputs": [], "source": [ @@ -822,37 +1357,37 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "(44744, 62)" + "(25232, 62)" ] }, - "execution_count": 28, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "df_final = pd.merge(left=df_final, right=filtered_calendario[['Ciclo','INICIO CICLO','FIM CICLO','DURAÇÃO','MATCH','dias_ate_inicio']], on='MATCH',how='inner')\n", + "df_final = pd.merge(left=df_final, right=filtered_calendario[['Ciclo','INICIO CICLO','FIM CICLO','DURAÇÃO','MATCH','dias_ate_inicio']], on='MATCH',how='left')\n", "df_final.shape" ] }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "(54425, 72)" + "(30861, 72)" ] }, - "execution_count": 29, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } @@ -870,16 +1405,16 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "(54425, 76)" + "(30861, 76)" ] }, - "execution_count": 30, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" } @@ -895,16 +1430,16 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "(54514, 80)" + "(30950, 80)" ] }, - "execution_count": 31, + "execution_count": 38, "metadata": {}, "output_type": "execute_result" } @@ -918,7 +1453,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 39, "metadata": {}, "outputs": [], "source": [ @@ -930,19 +1465,19 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "CANAL\n", - "TODOS 42336\n", - "VD 12178\n", + "TODOS 23509\n", + "VD 6445\n", "Name: count, dtype: int64" ] }, - "execution_count": 33, + "execution_count": 40, "metadata": {}, "output_type": "execute_result" } @@ -955,33 +1490,9 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 41, "metadata": {}, - "outputs": [ - { - "ename": "KeyboardInterrupt", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[31m---------------------------------------------------------------------------\u001b[39m", - "\u001b[31mKeyboardInterrupt\u001b[39m Traceback (most recent call last)", - "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[34]\u001b[39m\u001b[32m, line 5\u001b[39m\n\u001b[32m 1\u001b[39m df_estoque = df_estoque.rename(columns={\u001b[33m'\u001b[39m\u001b[33mSKU_FINAL\u001b[39m\u001b[33m'\u001b[39m:\u001b[33m'\u001b[39m\u001b[33mSKU_PARA_VALIDACAO\u001b[39m\u001b[33m'\u001b[39m})\n\u001b[32m 3\u001b[39m df_estoque[\u001b[33m'\u001b[39m\u001b[33mSKU_PARA_VALIDACAO\u001b[39m\u001b[33m'\u001b[39m] = df_estoque[\u001b[33m'\u001b[39m\u001b[33mSKU_PARA_VALIDACAO\u001b[39m\u001b[33m'\u001b[39m].astype(\u001b[33m'\u001b[39m\u001b[33mInt64\u001b[39m\u001b[33m'\u001b[39m)\n\u001b[32m----> \u001b[39m\u001b[32m5\u001b[39m df_final = \u001b[43mpd\u001b[49m\u001b[43m.\u001b[49m\u001b[43mmerge\u001b[49m\u001b[43m(\u001b[49m\u001b[43m \u001b[49m\u001b[43mleft\u001b[49m\u001b[43m=\u001b[49m\u001b[43m \u001b[49m\u001b[43mdf_final\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mright\u001b[49m\u001b[43m \u001b[49m\u001b[43m=\u001b[49m\u001b[43m \u001b[49m\u001b[43mdf_estoque\u001b[49m\u001b[43m[\u001b[49m\u001b[43m[\u001b[49m\u001b[33;43m'\u001b[39;49m\u001b[33;43mSKU_PARA_VALIDACAO\u001b[39;49m\u001b[33;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[33;43m'\u001b[39;49m\u001b[33;43mArquivo_Origem\u001b[39;49m\u001b[33;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mleft_on\u001b[49m\u001b[43m=\u001b[49m\u001b[43m \u001b[49m\u001b[33;43m'\u001b[39;49m\u001b[33;43mSKU\u001b[39;49m\u001b[33;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mright_on\u001b[49m\u001b[43m=\u001b[49m\u001b[33;43m'\u001b[39;49m\u001b[33;43mSKU_PARA_VALIDACAO\u001b[39;49m\u001b[33;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mhow\u001b[49m\u001b[43m=\u001b[49m\u001b[33;43m'\u001b[39;49m\u001b[33;43mleft\u001b[39;49m\u001b[33;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[32m 7\u001b[39m df_final = df_final.drop_duplicates()\n", - "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\pandas\\core\\reshape\\merge.py:184\u001b[39m, in \u001b[36mmerge\u001b[39m\u001b[34m(left, right, how, on, left_on, right_on, left_index, right_index, sort, suffixes, copy, indicator, validate)\u001b[39m\n\u001b[32m 169\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[32m 170\u001b[39m op = _MergeOperation(\n\u001b[32m 171\u001b[39m left_df,\n\u001b[32m 172\u001b[39m right_df,\n\u001b[32m (...)\u001b[39m\u001b[32m 182\u001b[39m validate=validate,\n\u001b[32m 183\u001b[39m )\n\u001b[32m--> \u001b[39m\u001b[32m184\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mop\u001b[49m\u001b[43m.\u001b[49m\u001b[43mget_result\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcopy\u001b[49m\u001b[43m=\u001b[49m\u001b[43mcopy\u001b[49m\u001b[43m)\u001b[49m\n", - "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\pandas\\core\\reshape\\merge.py:888\u001b[39m, in \u001b[36m_MergeOperation.get_result\u001b[39m\u001b[34m(self, copy)\u001b[39m\n\u001b[32m 884\u001b[39m \u001b[38;5;28mself\u001b[39m.left, \u001b[38;5;28mself\u001b[39m.right = \u001b[38;5;28mself\u001b[39m._indicator_pre_merge(\u001b[38;5;28mself\u001b[39m.left, \u001b[38;5;28mself\u001b[39m.right)\n\u001b[32m 886\u001b[39m join_index, left_indexer, right_indexer = \u001b[38;5;28mself\u001b[39m._get_join_info()\n\u001b[32m--> \u001b[39m\u001b[32m888\u001b[39m result = \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_reindex_and_concat\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 889\u001b[39m \u001b[43m \u001b[49m\u001b[43mjoin_index\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mleft_indexer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mright_indexer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcopy\u001b[49m\u001b[43m=\u001b[49m\u001b[43mcopy\u001b[49m\n\u001b[32m 890\u001b[39m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 891\u001b[39m result = result.__finalize__(\u001b[38;5;28mself\u001b[39m, method=\u001b[38;5;28mself\u001b[39m._merge_type)\n\u001b[32m 893\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m.indicator:\n", - "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\pandas\\core\\reshape\\merge.py:879\u001b[39m, in \u001b[36m_MergeOperation._reindex_and_concat\u001b[39m\u001b[34m(self, join_index, left_indexer, right_indexer, copy)\u001b[39m\n\u001b[32m 877\u001b[39m left.columns = llabels\n\u001b[32m 878\u001b[39m right.columns = rlabels\n\u001b[32m--> \u001b[39m\u001b[32m879\u001b[39m result = \u001b[43mconcat\u001b[49m\u001b[43m(\u001b[49m\u001b[43m[\u001b[49m\u001b[43mleft\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mright\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maxis\u001b[49m\u001b[43m=\u001b[49m\u001b[32;43m1\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcopy\u001b[49m\u001b[43m=\u001b[49m\u001b[43mcopy\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 880\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m result\n", - "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\pandas\\core\\reshape\\concat.py:395\u001b[39m, in \u001b[36mconcat\u001b[39m\u001b[34m(objs, axis, join, ignore_index, keys, levels, names, verify_integrity, sort, copy)\u001b[39m\n\u001b[32m 380\u001b[39m copy = \u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[32m 382\u001b[39m op = _Concatenator(\n\u001b[32m 383\u001b[39m objs,\n\u001b[32m 384\u001b[39m axis=axis,\n\u001b[32m (...)\u001b[39m\u001b[32m 392\u001b[39m sort=sort,\n\u001b[32m 393\u001b[39m )\n\u001b[32m--> \u001b[39m\u001b[32m395\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mop\u001b[49m\u001b[43m.\u001b[49m\u001b[43mget_result\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", - "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\pandas\\core\\reshape\\concat.py:684\u001b[39m, in \u001b[36m_Concatenator.get_result\u001b[39m\u001b[34m(self)\u001b[39m\n\u001b[32m 680\u001b[39m indexers[ax] = obj_labels.get_indexer(new_labels)\n\u001b[32m 682\u001b[39m mgrs_indexers.append((obj._mgr, indexers))\n\u001b[32m--> \u001b[39m\u001b[32m684\u001b[39m new_data = \u001b[43mconcatenate_managers\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 685\u001b[39m \u001b[43m \u001b[49m\u001b[43mmgrs_indexers\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mnew_axes\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mconcat_axis\u001b[49m\u001b[43m=\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mbm_axis\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcopy\u001b[49m\u001b[43m=\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mcopy\u001b[49m\n\u001b[32m 686\u001b[39m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 687\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mself\u001b[39m.copy \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m using_copy_on_write():\n\u001b[32m 688\u001b[39m new_data._consolidate_inplace()\n", - "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\pandas\\core\\internals\\concat.py:131\u001b[39m, in \u001b[36mconcatenate_managers\u001b[39m\u001b[34m(mgrs_indexers, axes, concat_axis, copy)\u001b[39m\n\u001b[32m 124\u001b[39m \u001b[38;5;66;03m# Assertions disabled for performance\u001b[39;00m\n\u001b[32m 125\u001b[39m \u001b[38;5;66;03m# for tup in mgrs_indexers:\u001b[39;00m\n\u001b[32m 126\u001b[39m \u001b[38;5;66;03m# # caller is responsible for ensuring this\u001b[39;00m\n\u001b[32m 127\u001b[39m \u001b[38;5;66;03m# indexers = tup[1]\u001b[39;00m\n\u001b[32m 128\u001b[39m \u001b[38;5;66;03m# assert concat_axis not in indexers\u001b[39;00m\n\u001b[32m 130\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m concat_axis == \u001b[32m0\u001b[39m:\n\u001b[32m--> \u001b[39m\u001b[32m131\u001b[39m mgrs = \u001b[43m_maybe_reindex_columns_na_proxy\u001b[49m\u001b[43m(\u001b[49m\u001b[43maxes\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmgrs_indexers\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mneeds_copy\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 132\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m mgrs[\u001b[32m0\u001b[39m].concat_horizontal(mgrs, axes)\n\u001b[32m 134\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(mgrs_indexers) > \u001b[32m0\u001b[39m \u001b[38;5;129;01mand\u001b[39;00m mgrs_indexers[\u001b[32m0\u001b[39m][\u001b[32m0\u001b[39m].nblocks > \u001b[32m0\u001b[39m:\n", - "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\pandas\\core\\internals\\concat.py:230\u001b[39m, in \u001b[36m_maybe_reindex_columns_na_proxy\u001b[39m\u001b[34m(axes, mgrs_indexers, needs_copy)\u001b[39m\n\u001b[32m 220\u001b[39m mgr = mgr.reindex_indexer(\n\u001b[32m 221\u001b[39m axes[i],\n\u001b[32m 222\u001b[39m indexers[i],\n\u001b[32m (...)\u001b[39m\u001b[32m 227\u001b[39m use_na_proxy=\u001b[38;5;28;01mTrue\u001b[39;00m, \u001b[38;5;66;03m# only relevant for i==0\u001b[39;00m\n\u001b[32m 228\u001b[39m )\n\u001b[32m 229\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m needs_copy \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m indexers:\n\u001b[32m--> \u001b[39m\u001b[32m230\u001b[39m mgr = \u001b[43mmgr\u001b[49m\u001b[43m.\u001b[49m\u001b[43mcopy\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 232\u001b[39m new_mgrs.append(mgr)\n\u001b[32m 233\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m new_mgrs\n", - "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\pandas\\core\\internals\\managers.py:604\u001b[39m, in \u001b[36mBaseBlockManager.copy\u001b[39m\u001b[34m(self, deep)\u001b[39m\n\u001b[32m 601\u001b[39m res._blklocs = \u001b[38;5;28mself\u001b[39m._blklocs.copy()\n\u001b[32m 603\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m deep:\n\u001b[32m--> \u001b[39m\u001b[32m604\u001b[39m \u001b[43mres\u001b[49m\u001b[43m.\u001b[49m\u001b[43m_consolidate_inplace\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 605\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m res\n", - "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\pandas\\core\\internals\\managers.py:1791\u001b[39m, in \u001b[36mBlockManager._consolidate_inplace\u001b[39m\u001b[34m(self)\u001b[39m\n\u001b[32m 1789\u001b[39m \u001b[38;5;28mself\u001b[39m._is_consolidated = \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[32m 1790\u001b[39m \u001b[38;5;28mself\u001b[39m._known_consolidated = \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[32m-> \u001b[39m\u001b[32m1791\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_rebuild_blknos_and_blklocs\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", - "\u001b[36mFile \u001b[39m\u001b[32minternals.pyx:755\u001b[39m, in \u001b[36mpandas._libs.internals.BlockManager._rebuild_blknos_and_blklocs\u001b[39m\u001b[34m()\u001b[39m\n", - "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\pandas\\core\\internals\\base.py:84\u001b[39m, in \u001b[36mDataManager.shape\u001b[39m\u001b[34m(self)\u001b[39m\n\u001b[32m 82\u001b[39m \u001b[38;5;129m@property\u001b[39m\n\u001b[32m 83\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34mshape\u001b[39m(\u001b[38;5;28mself\u001b[39m) -> Shape:\n\u001b[32m---> \u001b[39m\u001b[32m84\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mtuple\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mlen\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43max\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43max\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43maxes\u001b[49m\u001b[43m)\u001b[49m\n", - "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\pandas\\core\\internals\\base.py:84\u001b[39m, in \u001b[36m\u001b[39m\u001b[34m(.0)\u001b[39m\n\u001b[32m 82\u001b[39m \u001b[38;5;129m@property\u001b[39m\n\u001b[32m 83\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34mshape\u001b[39m(\u001b[38;5;28mself\u001b[39m) -> Shape:\n\u001b[32m---> \u001b[39m\u001b[32m84\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mtuple\u001b[39m(\u001b[38;5;28mlen\u001b[39m(ax) \u001b[38;5;28;01mfor\u001b[39;00m ax \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m.axes)\n", - "\u001b[31mKeyboardInterrupt\u001b[39m: " - ] - } - ], + "outputs": [], "source": [ "df_estoque = df_estoque.rename(columns={'SKU_FINAL':'SKU_PARA_VALIDACAO'})\n", "\n", @@ -994,7 +1505,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 42, "metadata": {}, "outputs": [], "source": [ @@ -1006,7 +1517,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 43, "metadata": {}, "outputs": [], "source": [ @@ -1015,7 +1526,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 44, "metadata": {}, "outputs": [], "source": [ @@ -1024,7 +1535,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 45, "metadata": {}, "outputs": [], "source": [ @@ -1033,7 +1544,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 46, "metadata": {}, "outputs": [], "source": [ @@ -1042,9 +1553,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 47, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "np.int64(0)" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "df_final = df_final[~df_final['Marca'].isna()]\n", "df_final['Marca'].isna().sum()" @@ -1052,9 +1574,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 48, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(30950, 74)" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "df_final = df_final.drop_duplicates()\n", "df_final.shape" @@ -1062,7 +1595,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 49, "metadata": {}, "outputs": [], "source": [ @@ -1071,16 +1604,45 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 50, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['Histórico de Vendas do Ciclo 202409',\n", + " 'Histórico de Vendas do Ciclo 202410',\n", + " 'Histórico de Vendas do Ciclo 202411',\n", + " 'Histórico de Vendas do Ciclo 202412',\n", + " 'Histórico de Vendas do Ciclo 202413',\n", + " 'Histórico de Vendas do Ciclo 202414',\n", + " 'Histórico de Vendas do Ciclo 202415',\n", + " 'Histórico de Vendas do Ciclo 202416',\n", + " 'Histórico de Vendas do Ciclo 202417',\n", + " 'Histórico de Vendas do Ciclo 202501',\n", + " 'Histórico de Vendas do Ciclo 202502',\n", + " 'Histórico de Vendas do Ciclo 202503',\n", + " 'Histórico de Vendas do Ciclo 202504',\n", + " 'Histórico de Vendas do Ciclo 202505',\n", + " 'Histórico de Vendas do Ciclo 202506',\n", + " 'Histórico de Vendas do Ciclo 202507',\n", + " 'Histórico de Vendas do Ciclo 202508',\n", + " 'Histórico de Vendas do Ciclo Atual'],\n", + " dtype='object')" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "df_final.columns[26:44]" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 51, "metadata": {}, "outputs": [], "source": [ @@ -1093,16 +1655,34 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 52, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['Histórico de Vendas do Ciclo 202503',\n", + " 'Histórico de Vendas do Ciclo 202504',\n", + " 'Histórico de Vendas do Ciclo 202505',\n", + " 'Histórico de Vendas do Ciclo 202506',\n", + " 'Histórico de Vendas do Ciclo 202507',\n", + " 'Histórico de Vendas do Ciclo 202508',\n", + " 'Histórico de Vendas do Ciclo Atual'],\n", + " dtype='object')" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "df_final.columns[37:44]" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 53, "metadata": {}, "outputs": [], "source": [ @@ -1113,18 +1693,45 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 54, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['Histórico de Vendas do Ciclo 202503',\n", + " 'Histórico de Vendas do Ciclo 202504',\n", + " 'Histórico de Vendas do Ciclo 202505',\n", + " 'Histórico de Vendas do Ciclo 202506',\n", + " 'Histórico de Vendas do Ciclo 202507',\n", + " 'Histórico de Vendas do Ciclo 202508',\n", + " 'Histórico de Vendas do Ciclo Atual'],\n", + " dtype='object')" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "df_final.columns[37:44]" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 55, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\joao.herculano\\AppData\\Local\\Temp\\ipykernel_17756\\2592201544.py:24: DeprecationWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.\n", + " crescimento_por_pdv = df_final.groupby('PDV').apply(calcular_crescimento)\n" + ] + } + ], "source": [ "# Define as colunas mensais\n", "colunas_mensais = df_final.columns[26:43]\n", @@ -1157,9 +1764,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 56, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "np.float64(0.0564)" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Suponha que os meses estão nas colunas 10 a 26 (17 colunas = 17 meses)\n", "colunas_mensais = df_final.columns[26:43]\n", @@ -1196,9 +1814,60 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 57, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CANALmed_por_canal
0TODOS90.5
1VD715.0
\n", + "
" + ], + "text/plain": [ + " CANAL med_por_canal\n", + "0 TODOS 90.5\n", + "1 VD 715.0" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "vendas_todos_historicos = df_final.columns[26:44]\n", "\n", @@ -1209,23 +1878,34 @@ "medi = df_final.groupby(['CANAL'])['MEDIANA DO HISTÓRICO'].max().reset_index()\n", "medi = medi.rename(columns={'MEDIANA DO HISTÓRICO':'med_por_canal'})\n", "\n", - "df_final = pd.merge(left=df_final, right=medi,on='CANAL',how='inner')\n", + "df_final = pd.merge(left=df_final, right=medi,on='CANAL',how='left')\n", "\n", "medi" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 58, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "'202411'" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "df_final.columns[28:29].str.split(\" \")[0][-1]" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 59, "metadata": {}, "outputs": [], "source": [ @@ -1236,9 +1916,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 60, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(30950, 84)" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "df_final['CRESCIMENTO_FINAL'] = df_final['CRESCIMENTO_GERAL'] + df_final['CRESCIMENTO'] #crescimento do pdv\n", "\n", @@ -1259,16 +1950,40 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 61, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['Histórico de Vendas do Ciclo 202409',\n", + " 'Histórico de Vendas do Ciclo 202410',\n", + " 'Histórico de Vendas do Ciclo 202411',\n", + " 'Histórico de Vendas do Ciclo 202412',\n", + " 'Histórico de Vendas do Ciclo 202413',\n", + " 'Histórico de Vendas do Ciclo 202414',\n", + " 'Histórico de Vendas do Ciclo 202415',\n", + " 'Histórico de Vendas do Ciclo 202416',\n", + " 'Histórico de Vendas do Ciclo 202417',\n", + " 'Histórico de Vendas do Ciclo 202501',\n", + " 'Histórico de Vendas do Ciclo 202502',\n", + " 'Histórico de Vendas do Ciclo 202503',\n", + " 'Histórico de Vendas do Ciclo 202504'],\n", + " dtype='object')" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "df_final.columns[26:39]" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 62, "metadata": {}, "outputs": [], "source": [ @@ -1277,7 +1992,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 63, "metadata": {}, "outputs": [], "source": [ @@ -1286,7 +2001,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 64, "metadata": {}, "outputs": [], "source": [ @@ -1304,7 +2019,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 65, "metadata": {}, "outputs": [], "source": [ @@ -1313,16 +2028,38 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 66, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "76 9.0\n", + "152 0.0\n", + "228 0.0\n", + "304 0.0\n", + "380 0.0\n", + " ... \n", + "30610 18.0\n", + "30708 129.0\n", + "30785 744.0\n", + "30861 1074.0\n", + "30937 113.0\n", + "Name: C-3, Length: 371, dtype: float64" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "df_final_dedup[(df_final['PDV'] == 23712)]['C-3']" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 67, "metadata": {}, "outputs": [], "source": [ @@ -1335,16 +2072,47 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 68, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['202411', 'ANALISTA', 'Arquivo_Origem_x', 'Arquivo_Origem_y',\n", + " 'Ação consumidor', 'Ação revendedor', 'C-1', 'C-2', 'C-3', 'C-4',\n", + " 'CANAL', 'COBERTURA ATUAL + TRANSITO', 'CRESCIMENTO',\n", + " 'CRESCIMENTO_FINAL', 'CRESCIMENTO_GERAL', 'Canal', 'Categoria',\n", + " 'Catálogo', 'Ciclo_x', 'Ciclo_y', 'Classe', 'Código', 'DESCRIÇÃO PDV',\n", + " 'DURAÇÃO', 'Data Prevista Regularização', 'Descrição', 'Dias sem venda',\n", + " 'ESTOQUE ATUAL', 'ESTOQUE EM TRANSITO', 'Estoque Atual',\n", + " 'Estoque em Transito', 'FIM CICLO', 'Foco',\n", + " 'Histórico de Vendas do Ciclo 202408',\n", + " 'Histórico de Vendas do Ciclo Atual', 'IAF', 'INICIO CICLO',\n", + " 'Item Desativado', 'MATCH', 'MEDIA DO HISTÓRICO',\n", + " 'MEDIANA DO HISTÓRICO', 'Marca', 'PDV', 'PEDIDO PENDENTE',\n", + " 'PICO DE VENDAS 2024', 'PRECO DE COMPRA', 'PRECO DE VENDA',\n", + " 'PV GINSENG', 'Pedido Pendente', 'Percentual de desconto consumidor',\n", + " 'Percentual de desconto revendedor', 'Pico Vendas Ultimos 6 ciclos',\n", + " 'Projeção Próximo Ciclo', 'Projeção Próximo Ciclo + 1',\n", + " 'Promoção Próximo Ciclo + 1', 'Região', 'SKU', 'SKU_FINAL', 'SKU_PARA',\n", + " 'SKU_PARA_VALIDACAO', 'SUPERVISOR', 'Tipo de pedido', 'Tipo de produto',\n", + " 'Tipo de promoção', 'UF', 'UFPRODUTO', 'Unidade de negócio',\n", + " 'dias_ate_inicio', 'med_por_canal', 'DDV PREVISTO', 'COBERTURA ATUAL'],\n", + " dtype='object')" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "df_final_dedup.columns" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 69, "metadata": {}, "outputs": [], "source": [ @@ -1353,7 +2121,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 70, "metadata": {}, "outputs": [], "source": [ @@ -1362,7 +2130,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 71, "metadata": {}, "outputs": [], "source": [ @@ -1371,18 +2139,47 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 72, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['SKU', 'SKU_PARA', 'PDV', 'ESTOQUE ATUAL', 'ESTOQUE EM TRANSITO',\n", + " 'PEDIDO PENDENTE', 'DDV PREVISTO', 'COBERTURA ATUAL',\n", + " 'COBERTURA ATUAL + TRANSITO', 'Arquivo_Origem', 'SKU_PARA_VALIDACAO'],\n", + " dtype='object')" + ] + }, + "execution_count": 72, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "df_estoque.columns" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 73, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "('Ação consumidor',\n", + " 'Percentual de desconto consumidor',\n", + " 'Ação revendedor',\n", + " 'Percentual de desconto revendedor',\n", + " '202408')" + ] + }, + "execution_count": 73, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Columns to bring up front\n", "priority_cols = [\n", @@ -1406,7 +2203,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 74, "metadata": {}, "outputs": [], "source": [ @@ -1415,7 +2212,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 75, "metadata": {}, "outputs": [], "source": [ @@ -1424,7 +2221,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 76, "metadata": {}, "outputs": [], "source": [ @@ -1436,7 +2233,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 77, "metadata": {}, "outputs": [], "source": [ @@ -1445,7 +2242,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 78, "metadata": {}, "outputs": [], "source": [ @@ -1455,16 +2252,16 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 79, "metadata": {}, "outputs": [], "source": [ - "df_final_dedup['MARCA'] = df_final_dedup['MARCA'].str.replace('.csv','',regex=False)" + "#df_final_dedup['MARCA'] = df_final_dedup['MARCA'].str.replace('.csv','',regex=False)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 80, "metadata": {}, "outputs": [], "source": [ @@ -1473,9 +2270,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 81, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "'BOT'" + ] + }, + "execution_count": 81, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "marca_promo = df_estoque['Arquivo_Origem'].iloc[0].replace('.csv','')\n", "marca_promo" @@ -1483,7 +2291,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 82, "metadata": {}, "outputs": [], "source": [ @@ -1494,7 +2302,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 83, "metadata": {}, "outputs": [], "source": [ @@ -1503,7 +2311,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 84, "metadata": {}, "outputs": [], "source": [ @@ -1511,12 +2319,50 @@ "df_final_dedup['PDV'] = df_final_dedup['PDV'].astype('Int64')\n", "\n", "\n", - "df_final_dedup = pd.merge(left=df_final_dedup,right=df_pdv_origi[['PDV','CANAL','UF']],how='inner',on='PDV')" + "df_final_dedup = pd.merge(left=df_final_dedup,right=df_pdv_origi[['PDV','CANAL','UF']],how='left',on='PDV')" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 85, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "np.int64(0)" + ] + }, + "execution_count": 85, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_final_dedup['Código'].isna().sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "metadata": {}, + "outputs": [], + "source": [ + "df_final_dedup.to_excel(r'C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\DB_PROMOÇÕES\\BOTICARIO\\C11\\teste.xlsx')" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "metadata": {}, + "outputs": [], + "source": [ + "df_final_dedup = df_final_dedup[df_final_dedup['Código']!= '']\n" + ] + }, + { + "cell_type": "code", + "execution_count": 88, "metadata": {}, "outputs": [], "source": [ @@ -1528,30 +2374,264 @@ "\n", "df_final_dedup =pd.merge(left=df_final_dedup,right=df_vdc[['PDV GINSENG','PRODUTO',ciclo_ano_passado]],left_on= ['PDV','Código'],right_on= ['PDV GINSENG','PRODUTO'],how='left' )\n", "\n", - "df_final_dedup['202410_y'] = df_final_dedup['202410_y'].fillna(0)" + "df_final_dedup[df_final_dedup.columns[-1]] = df_final_dedup[df_final_dedup.columns[-1]].fillna(0)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 89, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
202411_xANALISTAArquivo_Origem_xArquivo_Origem_yAção consumidorAção revendedorC-1C-2C-3C-4...COBERTURA ATUALEST PROJE FINAL CICLO ATUALVENDAS R$ PV GINSENGRBV 202406COB PROJETADACANAL_yUF_yPDV GINSENGPRODUTO202411_y
00.0DANIELBOT.csvBOT.csvBODY SPRAY BOTICOLLECTION COM 20% DE DESCONTOBODY SPRAY BOTICOLLECTION COM 20% DE DESCONTO0.00.00.01.0...166.04.0NaNNaN166.666667LJBANaN<NA>0.0
10.0DANIELBOT.csvBOT.csvBODY SPRAY BOTICOLLECTION COM 20% DE DESCONTOBODY SPRAY BOTICOLLECTION COM 20% DE DESCONTO0.02.00.00.0...45.01.0NaNNaN100.000000LJVDCNaN<NA>0.0
20.0DANIELBOT.csvBOT.csvBODY SPRAY BOTICOLLECTION COM 20% DE DESCONTOBODY SPRAY BOTICOLLECTION COM 20% DE DESCONTO2.00.00.01.0...200.02.0NaNNaN200.000000LJBANaN<NA>0.0
30.0DANIELBOT.csvBOT.csvBODY SPRAY BOTICOLLECTION COM 20% DE DESCONTOBODY SPRAY BOTICOLLECTION COM 20% DE DESCONTO3.00.00.03.0...0.03.0NaNNaN83.333333LJBANaN<NA>0.0
40.0DANIELBOT.csvBOT.csvBODY SPRAY BOTICOLLECTION COM 20% DE DESCONTOBODY SPRAY BOTICOLLECTION COM 20% DE DESCONTO4.00.00.00.0...100.01.0NaNNaN100.000000VDVDC23703.0290460.0
\n", + "

5 rows × 76 columns

\n", + "
" + ], + "text/plain": [ + " 202411_x ANALISTA Arquivo_Origem_x Arquivo_Origem_y \\\n", + "0 0.0 DANIEL BOT.csv BOT.csv \n", + "1 0.0 DANIEL BOT.csv BOT.csv \n", + "2 0.0 DANIEL BOT.csv BOT.csv \n", + "3 0.0 DANIEL BOT.csv BOT.csv \n", + "4 0.0 DANIEL BOT.csv BOT.csv \n", + "\n", + " Ação consumidor \\\n", + "0 BODY SPRAY BOTICOLLECTION COM 20% DE DESCONTO \n", + "1 BODY SPRAY BOTICOLLECTION COM 20% DE DESCONTO \n", + "2 BODY SPRAY BOTICOLLECTION COM 20% DE DESCONTO \n", + "3 BODY SPRAY BOTICOLLECTION COM 20% DE DESCONTO \n", + "4 BODY SPRAY BOTICOLLECTION COM 20% DE DESCONTO \n", + "\n", + " Ação revendedor C-1 C-2 C-3 C-4 ... \\\n", + "0 BODY SPRAY BOTICOLLECTION COM 20% DE DESCONTO 0.0 0.0 0.0 1.0 ... \n", + "1 BODY SPRAY BOTICOLLECTION COM 20% DE DESCONTO 0.0 2.0 0.0 0.0 ... \n", + "2 BODY SPRAY BOTICOLLECTION COM 20% DE DESCONTO 2.0 0.0 0.0 1.0 ... \n", + "3 BODY SPRAY BOTICOLLECTION COM 20% DE DESCONTO 3.0 0.0 0.0 3.0 ... \n", + "4 BODY SPRAY BOTICOLLECTION COM 20% DE DESCONTO 4.0 0.0 0.0 0.0 ... \n", + "\n", + " COBERTURA ATUAL EST PROJE FINAL CICLO ATUAL VENDAS R$ PV GINSENG \\\n", + "0 166.0 4.0 NaN \n", + "1 45.0 1.0 NaN \n", + "2 200.0 2.0 NaN \n", + "3 0.0 3.0 NaN \n", + "4 100.0 1.0 NaN \n", + "\n", + " RBV 202406 COB PROJETADA CANAL_y UF_y PDV GINSENG PRODUTO 202411_y \n", + "0 NaN 166.666667 LJ BA NaN 0.0 \n", + "1 NaN 100.000000 LJ VDC NaN 0.0 \n", + "2 NaN 200.000000 LJ BA NaN 0.0 \n", + "3 NaN 83.333333 LJ BA NaN 0.0 \n", + "4 NaN 100.000000 VD VDC 23703.0 29046 0.0 \n", + "\n", + "[5 rows x 76 columns]" + ] + }, + "execution_count": 89, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "df_final_dedup.head()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 90, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "'202411_y'" + ] + }, + "execution_count": 90, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "df_final_dedup['202410_x'] = np.where(df_final_dedup['202410_y']>0,df_final_dedup['202410_y'],df_final_dedup['202410_x'])" + "df_final_dedup.columns[-1]" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 91, + "metadata": {}, + "outputs": [], + "source": [ + "df_final_dedup[df_final_dedup.columns[0]] = np.where(df_final_dedup[df_final_dedup.columns[-1]]>0,df_final_dedup[df_final_dedup.columns[-1]],df_final_dedup[df_final_dedup.columns[0]])" + ] + }, + { + "cell_type": "code", + "execution_count": 92, "metadata": {}, "outputs": [], "source": [ @@ -1560,7 +2640,7 @@ " 'PRECO DE COMPRA','SKU','SKU_PARA','SKU_PARA_VALIDACAO',\n", " 'Tipo de pedido',\t'Tipo de produto','UFPRODUTO','Unidade de negócio','EST PROJE FINAL CICLO ATUAL',\n", " 'UF_x','RBV 202406','Região','Catálogo','SKU','VENDAS R$ PV GINSENG','Data Prevista Regularização',\n", - " 'IAF', 'Item Desativado','Tipo de promoção','PDV GINSENG','PRODUTO','202410_y',\n", + " 'IAF', 'Item Desativado','Tipo de promoção','PDV GINSENG','PRODUTO','202411_y',\n", " 'ESTOQUE ATUAL', 'ESTOQUE EM TRANSITO','COBERTURA ATUAL + TRANSITO',\n", " 'DDV PREVISTO',\t'COB PROJETADA','COBERTURA ATUAL',\n", " 'CRESCIMENTO_FINAL',\t'CRESCIMENTO_GERAL','med_por_canal','PEDIDO PENDENTE'])" @@ -1568,7 +2648,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 93, "metadata": {}, "outputs": [], "source": [ @@ -1577,25 +2657,76 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 94, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['202411_x', 'ANALISTA', 'Ação consumidor', 'Ação revendedor', 'C-1',\n", + " 'C-2', 'C-3', 'C-4', 'Categoria', 'Classe', 'Código', 'DESCRIÇÃO PDV',\n", + " 'Descrição', 'Dias sem venda', 'Estoque Atual', 'Estoque em Transito',\n", + " 'Histórico de Vendas do Ciclo 202408',\n", + " 'Histórico de Vendas do Ciclo Atual', 'MEDIANA DO HISTÓRICO', 'LINHA',\n", + " 'PDV', 'PICO DE VENDAS 2024', 'PRECO DE VENDA', 'PV GINSENG',\n", + " 'Pedido Pendente', 'Percentual de desconto consumidor',\n", + " 'Percentual de desconto revendedor', 'Pico Vendas Ultimos 6 ciclos',\n", + " 'Projeção Próximo Ciclo', 'Projeção Próximo Ciclo + 1',\n", + " 'Promoção Próximo Ciclo + 1', 'SUPERVISOR', 'CANAL', 'UF'],\n", + " dtype='object')" + ] + }, + "execution_count": 94, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "df_final_dedup.columns" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 95, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\joao.herculano\\AppData\\Local\\Temp\\ipykernel_17756\\4017566689.py:1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + " df_final_dedup[(df_final['PDV'] == 23712)]['C-3']\n" + ] + }, + { + "data": { + "text/plain": [ + "76 9.0\n", + "152 0.0\n", + "228 0.0\n", + "304 0.0\n", + "380 0.0\n", + " ... \n", + "29314 6.0\n", + "29390 26.0\n", + "29466 137.0\n", + "29542 116.0\n", + "29618 23.0\n", + "Name: C-3, Length: 355, dtype: float64" + ] + }, + "execution_count": 95, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "df_final_dedup[(df_final['PDV'] == 23712)]['C-3']" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 96, "metadata": {}, "outputs": [], "source": [ @@ -1615,7 +2746,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 97, "metadata": {}, "outputs": [], "source": [ @@ -1624,25 +2755,47 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 98, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "np.float64(75876.0)" + ] + }, + "execution_count": 98, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "df_final_dedup['PV GINSENG'].sum()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 99, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "np.int64(0)" + ] + }, + "execution_count": 99, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "df_final_dedup[df_final_dedup['PDV'] == 23712]['PICO DE VENDAS 2024'].isna().sum()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 100, "metadata": {}, "outputs": [], "source": [