{ "cells": [ { "cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import os\n", "import glob" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "PRÉ REQUISITOS PARA RODAR ESSE ESTUDO:\n", "\n", "\n", " Arquivo Estoque\n", " Arquivo draft\n", " Tabelas de pedido do ciclo atual e ciclo atual +1\n", " Tabela de preços (BI)\n", " Planilha de PDVs" ] }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [], "source": [ "\n", "\n", "# Caminho onde estão as subpastas com os arquivos CSV\n", "pasta_entrada = r\"C:\\Users\\roberto.alves\\Documents\\arquivos importantes\\ESTUDO_BAZAR_02.04.25\\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", "\n", "df_list = []\n", "\n", "# Percorre todas as subpastas\n", "for subpasta in subpastas:\n", " arquivos = [f for f in os.listdir(subpasta) if f.endswith(\".csv\")]\n", " nome_pasta = os.path.basename(subpasta) # Obtém o nome da pasta\n", "\n", " for arquivo in arquivos:\n", " caminho_arquivo = os.path.join(subpasta, arquivo)\n", " try:\n", " df = pd.read_csv(caminho_arquivo, encoding=\"utf-8\", low_memory=False) # Melhor para grandes volumes de dados\n", " df[\"Arquivo_Origem\"] = arquivo # Adiciona o nome do arquivo de origem\n", " df[\"Pasta_Origem\"] = nome_pasta # Adiciona o nome da pasta de origem\n", " df_list.append(df)\n", " except Exception as e:\n", " print(f\"Erro ao ler o arquivo {arquivo}: {e}\")\n", "\n", "if df_list:\n", " df_estoque = pd.concat(df_list, ignore_index=True)\n", "\n" ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(113638, 46)" ] }, "execution_count": 73, "metadata": {}, "output_type": "execute_result" } ], "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\\roberto.alves\\Documents\\arquivos importantes\\ESTUDO_BAZAR_02.04.25\\DRAFT\" # arquivo dos drafts\n", "\n", "# Pattern to match all CSV files\n", "csv_files = glob.glob(os.path.join(folder_path, '*.csv'))\n", "\n", "# Read and concat all CSVs\n", "df_draft = pd.concat([pd.read_csv(file) for file in csv_files], ignore_index=True)\n", "df_draft.shape\n" ] }, { "cell_type": "code", "execution_count": 83, "metadata": {}, "outputs": [], "source": [ "df_bi_preco = pd.read_excel(r\"C:\\Users\\roberto.alves\\Documents\\arquivos importantes\\ESTUDO_BAZAR_02.04.25\\PREÇO BI\\TABELA DE PREÇOS.xlsx\")" ] }, { "cell_type": "code", "execution_count": 78, "metadata": {}, "outputs": [], "source": [ "df_ciclo6= pd.read_excel(r\"C:\\Users\\roberto.alves\\Documents\\arquivos importantes\\ESTUDO_BAZAR_02.04.25\\TABELAS DE PEDIDO\\Pedidos Semanais Especiais - GKD - 202506.xlsx\")\n", "df_ciclo7 = pd.read_excel(r\"C:\\Users\\roberto.alves\\Documents\\arquivos importantes\\ESTUDO_BAZAR_02.04.25\\TABELAS DE PEDIDO\\Pedidos Semanais Especiais - GKD - 202507.xlsx\")" ] }, { "cell_type": "code", "execution_count": 86, "metadata": {}, "outputs": [], "source": [ "df_pdv = pd.read_excel(r\"C:\\Users\\roberto.alves\\GRUPO GINSENG\\Assistência Suprimentos - BD_LANÇAMENTOS\\BASE DE DADOS LANÇAMENTO\\BOT\\PDV\\DB_PDV.xlsx\")\n" ] }, { "cell_type": "code", "execution_count": 68, "metadata": {}, "outputs": [], "source": [ "\n", "df_estoque = df_estoque[~df_estoque['CATEGORIA'].isin([\"SUPORTE À VENDA\",\"EMBALAGENS\"])] #excluindo apenas o que possui categoria igual a \"SUPORTE À VENDA\" e \"EMBALAGENS\"\n", "\n", "df_estoque = df_estoque[df_estoque['ESTOQUE ATUAL']> 0.0 ]\n", "\n", "\n", "df_estoque['SKU_FINAL'] = np.where(df_estoque['SKU_PARA'] == \"-\", df_estoque['SKU'], df_estoque['SKU_PARA'])\n", "\n", "df_estoque = df_estoque[df_estoque['Arquivo_Origem'] == \"EUD.csv\"]\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "df_estoque['DDV PREVISTO'] = np.where(df_estoque['DDV PREVISTO'].isna(),0.001,df_estoque['DDV PREVISTO']) # em casos de DDV(dias de venda) faltante assumir que o ddv é 0.0001 \n", "\n", "df_estoque['PREVISAO_VENDAS_45D'] = df_estoque['DDV PREVISTO'] * 45\n", "\n", "df_estoque['COBERTURA_CALCULADA'] = df_estoque['ESTOQUE ATUAL'] / df_estoque['DDV PREVISTO']\n", "\n", "df_estoque['COBERTURA_CALCULADA'] = np.where(df_estoque['COBERTURA_CALCULADA']> 1000 ,1000 ,df_estoque['COBERTURA_CALCULADA'])\n", "\n", "df_estoque = df_estoque.reset_index()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "estoque_grouped = df_estoque.groupby(['PDV','DESCRICAO','SKU_FINAL','CATEGORIA','CLASSE']).agg({\n", " 'ESTOQUE ATUAL': 'sum',\n", " 'PREVISAO_VENDAS_45D': 'max',\n", " 'COBERTURA_CALCULADA' : 'mean'\n", "}).reset_index()\n" ] }, { "cell_type": "code", "execution_count": 75, "metadata": {}, "outputs": [], "source": [ "df_draft['Projeção Próximo Ciclo + 1'] = df_draft['Projeção Próximo Ciclo + 1'] - df_draft['Projeção Próximo Ciclo']" ] }, { "cell_type": "code", "execution_count": 76, "metadata": {}, "outputs": [], "source": [ "df_draft[\"PDV\"]= df_draft[\"PDV\"].astype(int)\n", "df_draft[\"SKU\"]= df_draft[\"SKU\"].astype(int)" ] }, { "cell_type": "code", "execution_count": 77, "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", "
PDVSKUProjeção Próximo CicloProjeção Próximo Ciclo + 1
0237014901471
1237024901471
2237054901420
3237064901430
4237034901463
\n", "
" ], "text/plain": [ " PDV SKU Projeção Próximo Ciclo Projeção Próximo Ciclo + 1\n", "0 23701 49014 7 1\n", "1 23702 49014 7 1\n", "2 23705 49014 2 0\n", "3 23706 49014 3 0\n", "4 23703 49014 6 3" ] }, "execution_count": 77, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_draft[['PDV','SKU','Projeção Próximo Ciclo','Projeção Próximo Ciclo + 1']].head()" ] }, { "cell_type": "code", "execution_count": 79, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(3966, 23)\n", "(2082, 23)\n" ] } ], "source": [ "print(df_ciclo6.shape)\n", "print(df_ciclo7.shape)" ] }, { "cell_type": "code", "execution_count": 80, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(1322, 23)\n", "(694, 23)\n" ] } ], "source": [ "df_ciclo6 = df_ciclo6[df_ciclo6['Região']=='NNE'] #filtrando apenas região NNE\n", "df_ciclo7 = df_ciclo7[df_ciclo7['Região']=='NNE'] #filtrando apenas região NNE\n", "\n", "print(df_ciclo6.shape)\n", "print(df_ciclo7.shape)" ] }, { "cell_type": "code", "execution_count": 81, "metadata": {}, "outputs": [], "source": [ "df_ciclo6 = df_ciclo6.rename(columns= {'Ação consumidor':'Ação consumidor_Ciclo6'})\n", "df_ciclo7 = df_ciclo7.rename(columns= {'Ação consumidor':'Ação consumidor_Ciclo7'})\n", "\n", "df_ciclo6 = df_ciclo6.rename(columns= {'Percentual de desconto consumidor':'Percentual de desconto consumidor_Ciclo6'})\n", "df_ciclo7 = df_ciclo7.rename(columns= {'Percentual de desconto consumidor':'Percentual de desconto consumidor_Ciclo7'})\n", "\n", "df_ciclo6 = df_ciclo6.rename(columns= {'Ação revendedor':'Ação revendedor_Ciclo6'})\n", "df_ciclo7 = df_ciclo7.rename(columns= {'Ação revendedor':'Ação revendedor_Ciclo7'})\n", "\n", "df_ciclo6 = df_ciclo6.rename(columns= {'Percentual de desconto revendedor':'Percentual de desconto revendedor_Ciclo6'})\n", "df_ciclo7 = df_ciclo7.rename(columns= {'Percentual de desconto revendedor':'Percentual de desconto revendedor_Ciclo7'})\n" ] }, { "cell_type": "code", "execution_count": 82, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2 10,00\n", "3 10,00\n", "6 10,00\n", "9 10,00\n", "14 10,00\n", " ... \n", "2069 0,00\n", "2071 10,00\n", "2074 0,00\n", "2076 10,00\n", "2081 33,66 | 44,12\n", "Name: percent_desconto0_7, Length: 694, dtype: object" ] }, "execution_count": 82, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_ciclo6['Percentual de desconto consumidor_Ciclo6'].value_counts()\n", "\n", "df_ciclo6['percent_desconto0_6'] = np.where(df_ciclo6['Percentual de desconto consumidor_Ciclo6'] != 0 ,df_ciclo6['Percentual de desconto revendedor_Ciclo6'] ,df_ciclo6['Percentual de desconto consumidor_Ciclo6'])\n", "\n", "df_ciclo7['percent_desconto0_7'] = np.where(df_ciclo7['Percentual de desconto consumidor_Ciclo7'] != 0 ,df_ciclo7['Percentual de desconto revendedor_Ciclo7'] ,df_ciclo7['Percentual de desconto consumidor_Ciclo7'])\n", "\n", "\n", "df_ciclo7['percent_desconto0_7']" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "\n", "df_bi_preco['SKU2'] = df_bi_preco['SKU2'].astype(int) #.str.replace(r'\\.0$', '', regex=True)\n", "df_bi_preco = df_bi_preco[df_bi_preco['MARCA'] == \"EUDORA\"] #MUDAR MARCA AQUI <<<<<<<<" ] }, { "cell_type": "code", "execution_count": 85, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1406, 10)" ] }, "execution_count": 85, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_bi_preco.shape" ] }, { "cell_type": "code", "execution_count": 87, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(6887, 6)" ] }, "execution_count": 87, "metadata": {}, "output_type": "execute_result" } ], "source": [ "estoque_grouped.shape" ] }, { "cell_type": "code", "execution_count": 88, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(6887, 7)" ] }, "execution_count": 88, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_final = pd.merge(estoque_grouped,df_pdv[['PDV','UF']], left_on=\"PDV\",right_on=\"PDV\",how=\"inner\")\n", "df_final.shape" ] }, { "cell_type": "code", "execution_count": 89, "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", "
PDVDESCRICAOSKU_FINALESTOQUE ATUALPREVISAO_VENDAS_45DCOBERTURA_CALCULADAUFPCPVSKU2
020968AURIEN DES COL GOLD 100ml V25296917.02.250340.000000SE35.76184.9052969.0
120968AURIEN DES COL RUBRA 100ml V34949617.05.400141.666667SE35.76184.9049496.0
220968AURIEN LOC HID DES CPO RUBRA 200ml V3494875.00.0451000.000000SENaNNaNNaN
320968AURIEN LOC ILUM DES CPO GOLD 200ml V2494851.00.0001000.000000SE9.9752.9949485.0
420968CARBON DES COL SPEED 100ml738578.00.0451000.000000SENaNNaNNaN
.................................
6882910291SECRETS BAS LIQ HD/GLOW COR 90 30ml9328912.00.0451000.000000AL19.1882.9993289.0
6883910291SECRETS BAS LIQ HD/GLOW COR 95 30ml934988.00.0451000.000000AL19.1882.9993498.0
6884910291SECRETS BASE LIQ HIDRA GLOW COR 00 30ml932741.00.0451000.000000AL19.1882.9993274.0
6885910291SIAGE COND GLOW EXPT 200ml471763.00.0451000.000000AL11.5949.9947176.0
6886910291SIAGE COND HAIR PLASTIA 200ml930472.00.0451000.000000AL11.5949.9993047.0
\n", "

6887 rows × 10 columns

\n", "
" ], "text/plain": [ " PDV DESCRICAO SKU_FINAL \\\n", "0 20968 AURIEN DES COL GOLD 100ml V2 52969 \n", "1 20968 AURIEN DES COL RUBRA 100ml V3 49496 \n", "2 20968 AURIEN LOC HID DES CPO RUBRA 200ml V3 49487 \n", "3 20968 AURIEN LOC ILUM DES CPO GOLD 200ml V2 49485 \n", "4 20968 CARBON DES COL SPEED 100ml 73857 \n", "... ... ... ... \n", "6882 910291 SECRETS BAS LIQ HD/GLOW COR 90 30ml 93289 \n", "6883 910291 SECRETS BAS LIQ HD/GLOW COR 95 30ml 93498 \n", "6884 910291 SECRETS BASE LIQ HIDRA GLOW COR 00 30ml 93274 \n", "6885 910291 SIAGE COND GLOW EXPT 200ml 47176 \n", "6886 910291 SIAGE COND HAIR PLASTIA 200ml 93047 \n", "\n", " ESTOQUE ATUAL PREVISAO_VENDAS_45D COBERTURA_CALCULADA UF PC \\\n", "0 17.0 2.250 340.000000 SE 35.76 \n", "1 17.0 5.400 141.666667 SE 35.76 \n", "2 5.0 0.045 1000.000000 SE NaN \n", "3 1.0 0.000 1000.000000 SE 9.97 \n", "4 8.0 0.045 1000.000000 SE NaN \n", "... ... ... ... .. ... \n", "6882 12.0 0.045 1000.000000 AL 19.18 \n", "6883 8.0 0.045 1000.000000 AL 19.18 \n", "6884 1.0 0.045 1000.000000 AL 19.18 \n", "6885 3.0 0.045 1000.000000 AL 11.59 \n", "6886 2.0 0.045 1000.000000 AL 11.59 \n", "\n", " PV SKU2 \n", "0 184.90 52969.0 \n", "1 184.90 49496.0 \n", "2 NaN NaN \n", "3 52.99 49485.0 \n", "4 NaN NaN \n", "... ... ... \n", "6882 82.99 93289.0 \n", "6883 82.99 93498.0 \n", "6884 82.99 93274.0 \n", "6885 49.99 47176.0 \n", "6886 49.99 93047.0 \n", "\n", "[6887 rows x 10 columns]" ] }, "execution_count": 89, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_final = pd.merge(df_final,df_bi_preco[['PC','PV','SKU2','UF']], left_on=[\"SKU_FINAL\",'UF'],right_on=[\"SKU2\",'UF'],how=\"left\")\n", "df_final" ] }, { "cell_type": "code", "execution_count": 90, "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", "
PDVDESCRICAOSKU_FINALESTOQUE ATUALPREVISAO_VENDAS_45DCOBERTURA_CALCULADAUFPCPVSKU2SKUProjeção Próximo CicloProjeção Próximo Ciclo + 1
020968AURIEN DES COL GOLD 100ml V25296917.02.25340.000000SE35.76184.9052969.05296900
120968AURIEN DES COL RUBRA 100ml V34949617.05.40141.666667SE35.76184.9049496.04949600
220968AURIEN LOC ILUM DES CPO GOLD 200ml V2494851.00.001000.000000SE9.9752.9949485.04948500
320968CHIC DES ANTIT AEROSSOL 125ml V25288518.00.001000.000000SE6.7835.9952885.05288500
420968CHIC DES COL 95ml V2498005.02.7083.333333SE23.19119.9049800.04980000
..........................................
501022541SOUL PO COMP FAC ULT MATE COR 95 10g926774.00.001000.000000AL11.6249.9992677.09267700
501122541VOLPE DES COL 100ml922192.09.459.523810AL34.55154.9092219.09221981
501222541VOLPE DES COL DNA 100ml491666.00.45600.000000AL34.55154.9049166.04916600
501322541VOLPE DES COL NEXT 100ml5229910.06.7566.666667AL34.55154.9052299.05229916
501422541VOLPE DES COL TRIUMPH 100ml5623125.02.25500.000000AL34.55154.9056231.05623111
\n", "

5015 rows × 13 columns

\n", "
" ], "text/plain": [ " PDV DESCRICAO SKU_FINAL ESTOQUE ATUAL \\\n", "0 20968 AURIEN DES COL GOLD 100ml V2 52969 17.0 \n", "1 20968 AURIEN DES COL RUBRA 100ml V3 49496 17.0 \n", "2 20968 AURIEN LOC ILUM DES CPO GOLD 200ml V2 49485 1.0 \n", "3 20968 CHIC DES ANTIT AEROSSOL 125ml V2 52885 18.0 \n", "4 20968 CHIC DES COL 95ml V2 49800 5.0 \n", "... ... ... ... ... \n", "5010 22541 SOUL PO COMP FAC ULT MATE COR 95 10g 92677 4.0 \n", "5011 22541 VOLPE DES COL 100ml 92219 2.0 \n", "5012 22541 VOLPE DES COL DNA 100ml 49166 6.0 \n", "5013 22541 VOLPE DES COL NEXT 100ml 52299 10.0 \n", "5014 22541 VOLPE DES COL TRIUMPH 100ml 56231 25.0 \n", "\n", " PREVISAO_VENDAS_45D COBERTURA_CALCULADA UF PC PV SKU2 \\\n", "0 2.25 340.000000 SE 35.76 184.90 52969.0 \n", "1 5.40 141.666667 SE 35.76 184.90 49496.0 \n", "2 0.00 1000.000000 SE 9.97 52.99 49485.0 \n", "3 0.00 1000.000000 SE 6.78 35.99 52885.0 \n", "4 2.70 83.333333 SE 23.19 119.90 49800.0 \n", "... ... ... .. ... ... ... \n", "5010 0.00 1000.000000 AL 11.62 49.99 92677.0 \n", "5011 9.45 9.523810 AL 34.55 154.90 92219.0 \n", "5012 0.45 600.000000 AL 34.55 154.90 49166.0 \n", "5013 6.75 66.666667 AL 34.55 154.90 52299.0 \n", "5014 2.25 500.000000 AL 34.55 154.90 56231.0 \n", "\n", " SKU Projeção Próximo Ciclo Projeção Próximo Ciclo + 1 \n", "0 52969 0 0 \n", "1 49496 0 0 \n", "2 49485 0 0 \n", "3 52885 0 0 \n", "4 49800 0 0 \n", "... ... ... ... \n", "5010 92677 0 0 \n", "5011 92219 8 1 \n", "5012 49166 0 0 \n", "5013 52299 1 6 \n", "5014 56231 1 1 \n", "\n", "[5015 rows x 13 columns]" ] }, "execution_count": 90, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_final = pd.merge(df_final,df_draft[['PDV','SKU','Projeção Próximo Ciclo','Projeção Próximo Ciclo + 1']],left_on=[\"PDV\",\"SKU_FINAL\"],right_on=[\"PDV\",\"SKU\"],how=\"inner\")\n", "df_final" ] }, { "cell_type": "code", "execution_count": 91, "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", "
PDVDESCRICAOSKU_FINALESTOQUE ATUALPREVISAO_VENDAS_45DCOBERTURA_CALCULADAUFPCPVSKU2SKUProjeção Próximo CicloProjeção Próximo Ciclo + 1Códigopercent_desconto0_6
020968AURIEN DES COL GOLD 100ml V25296917.02.25340.000000SE35.76184.9052969.0529690052969.00,00
120968AURIEN DES COL RUBRA 100ml V34949617.05.40141.666667SE35.76184.9049496.04949600NaNNaN
220968AURIEN LOC ILUM DES CPO GOLD 200ml V2494851.00.001000.000000SE9.9752.9949485.0494850049485.00,00
320968CHIC DES ANTIT AEROSSOL 125ml V25288518.00.001000.000000SE6.7835.9952885.05288500NaNNaN
420968CHIC DES COL 95ml V2498005.02.7083.333333SE23.19119.9049800.04980000NaNNaN
................................................
501022541SOUL PO COMP FAC ULT MATE COR 95 10g926774.00.001000.000000AL11.6249.9992677.0926770092677.00,00
501122541VOLPE DES COL 100ml922192.09.459.523810AL34.55154.9092219.0922198192219.00,00
501222541VOLPE DES COL DNA 100ml491666.00.45600.000000AL34.55154.9049166.04916600NaNNaN
501322541VOLPE DES COL NEXT 100ml5229910.06.7566.666667AL34.55154.9052299.05229916NaNNaN
501422541VOLPE DES COL TRIUMPH 100ml5623125.02.25500.000000AL34.55154.9056231.05623111NaNNaN
\n", "

5015 rows × 15 columns

\n", "
" ], "text/plain": [ " PDV DESCRICAO SKU_FINAL ESTOQUE ATUAL \\\n", "0 20968 AURIEN DES COL GOLD 100ml V2 52969 17.0 \n", "1 20968 AURIEN DES COL RUBRA 100ml V3 49496 17.0 \n", "2 20968 AURIEN LOC ILUM DES CPO GOLD 200ml V2 49485 1.0 \n", "3 20968 CHIC DES ANTIT AEROSSOL 125ml V2 52885 18.0 \n", "4 20968 CHIC DES COL 95ml V2 49800 5.0 \n", "... ... ... ... ... \n", "5010 22541 SOUL PO COMP FAC ULT MATE COR 95 10g 92677 4.0 \n", "5011 22541 VOLPE DES COL 100ml 92219 2.0 \n", "5012 22541 VOLPE DES COL DNA 100ml 49166 6.0 \n", "5013 22541 VOLPE DES COL NEXT 100ml 52299 10.0 \n", "5014 22541 VOLPE DES COL TRIUMPH 100ml 56231 25.0 \n", "\n", " PREVISAO_VENDAS_45D COBERTURA_CALCULADA UF PC PV SKU2 \\\n", "0 2.25 340.000000 SE 35.76 184.90 52969.0 \n", "1 5.40 141.666667 SE 35.76 184.90 49496.0 \n", "2 0.00 1000.000000 SE 9.97 52.99 49485.0 \n", "3 0.00 1000.000000 SE 6.78 35.99 52885.0 \n", "4 2.70 83.333333 SE 23.19 119.90 49800.0 \n", "... ... ... .. ... ... ... \n", "5010 0.00 1000.000000 AL 11.62 49.99 92677.0 \n", "5011 9.45 9.523810 AL 34.55 154.90 92219.0 \n", "5012 0.45 600.000000 AL 34.55 154.90 49166.0 \n", "5013 6.75 66.666667 AL 34.55 154.90 52299.0 \n", "5014 2.25 500.000000 AL 34.55 154.90 56231.0 \n", "\n", " SKU Projeção Próximo Ciclo Projeção Próximo Ciclo + 1 Código \\\n", "0 52969 0 0 52969.0 \n", "1 49496 0 0 NaN \n", "2 49485 0 0 49485.0 \n", "3 52885 0 0 NaN \n", "4 49800 0 0 NaN \n", "... ... ... ... ... \n", "5010 92677 0 0 92677.0 \n", "5011 92219 8 1 92219.0 \n", "5012 49166 0 0 NaN \n", "5013 52299 1 6 NaN \n", "5014 56231 1 1 NaN \n", "\n", " percent_desconto0_6 \n", "0 0,00 \n", "1 NaN \n", "2 0,00 \n", "3 NaN \n", "4 NaN \n", "... ... \n", "5010 0,00 \n", "5011 0,00 \n", "5012 NaN \n", "5013 NaN \n", "5014 NaN \n", "\n", "[5015 rows x 15 columns]" ] }, "execution_count": 91, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_final = pd.merge(df_final,df_ciclo6[['Código','percent_desconto0_6']],left_on=\"SKU_FINAL\",right_on='Código',how=\"left\")\n", "\n", "df_final" ] }, { "cell_type": "code", "execution_count": 92, "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", "
PDVDESCRICAOSKU_FINALESTOQUE ATUALPREVISAO_VENDAS_45DCOBERTURA_CALCULADAUFPCPVSKU2SKUProjeção Próximo CicloProjeção Próximo Ciclo + 1Código_xpercent_desconto0_6Código_ypercent_desconto0_7
020968AURIEN DES COL GOLD 100ml V25296917.02.25340.000000SE35.76184.9052969.0529690052969.00,0052969.010,00
120968AURIEN DES COL RUBRA 100ml V34949617.05.40141.666667SE35.76184.9049496.04949600NaNNaN49496.010,00
220968AURIEN LOC ILUM DES CPO GOLD 200ml V2494851.00.001000.000000SE9.9752.9949485.0494850049485.00,00NaNNaN
320968CHIC DES ANTIT AEROSSOL 125ml V25288518.00.001000.000000SE6.7835.9952885.05288500NaNNaNNaNNaN
420968CHIC DES COL 95ml V2498005.02.7083.333333SE23.19119.9049800.04980000NaNNaN49800.010,00
......................................................
501022541SOUL PO COMP FAC ULT MATE COR 95 10g926774.00.001000.000000AL11.6249.9992677.0926770092677.00,00NaNNaN
501122541VOLPE DES COL 100ml922192.09.459.523810AL34.55154.9092219.0922198192219.00,0092219.010,00
501222541VOLPE DES COL DNA 100ml491666.00.45600.000000AL34.55154.9049166.04916600NaNNaN49166.010,00
501322541VOLPE DES COL NEXT 100ml5229910.06.7566.666667AL34.55154.9052299.05229916NaNNaN52299.010,00
501422541VOLPE DES COL TRIUMPH 100ml5623125.02.25500.000000AL34.55154.9056231.05623111NaNNaN56231.010,00 | 43,25
\n", "

5015 rows × 17 columns

\n", "
" ], "text/plain": [ " PDV DESCRICAO SKU_FINAL ESTOQUE ATUAL \\\n", "0 20968 AURIEN DES COL GOLD 100ml V2 52969 17.0 \n", "1 20968 AURIEN DES COL RUBRA 100ml V3 49496 17.0 \n", "2 20968 AURIEN LOC ILUM DES CPO GOLD 200ml V2 49485 1.0 \n", "3 20968 CHIC DES ANTIT AEROSSOL 125ml V2 52885 18.0 \n", "4 20968 CHIC DES COL 95ml V2 49800 5.0 \n", "... ... ... ... ... \n", "5010 22541 SOUL PO COMP FAC ULT MATE COR 95 10g 92677 4.0 \n", "5011 22541 VOLPE DES COL 100ml 92219 2.0 \n", "5012 22541 VOLPE DES COL DNA 100ml 49166 6.0 \n", "5013 22541 VOLPE DES COL NEXT 100ml 52299 10.0 \n", "5014 22541 VOLPE DES COL TRIUMPH 100ml 56231 25.0 \n", "\n", " PREVISAO_VENDAS_45D COBERTURA_CALCULADA UF PC PV SKU2 \\\n", "0 2.25 340.000000 SE 35.76 184.90 52969.0 \n", "1 5.40 141.666667 SE 35.76 184.90 49496.0 \n", "2 0.00 1000.000000 SE 9.97 52.99 49485.0 \n", "3 0.00 1000.000000 SE 6.78 35.99 52885.0 \n", "4 2.70 83.333333 SE 23.19 119.90 49800.0 \n", "... ... ... .. ... ... ... \n", "5010 0.00 1000.000000 AL 11.62 49.99 92677.0 \n", "5011 9.45 9.523810 AL 34.55 154.90 92219.0 \n", "5012 0.45 600.000000 AL 34.55 154.90 49166.0 \n", "5013 6.75 66.666667 AL 34.55 154.90 52299.0 \n", "5014 2.25 500.000000 AL 34.55 154.90 56231.0 \n", "\n", " SKU Projeção Próximo Ciclo Projeção Próximo Ciclo + 1 Código_x \\\n", "0 52969 0 0 52969.0 \n", "1 49496 0 0 NaN \n", "2 49485 0 0 49485.0 \n", "3 52885 0 0 NaN \n", "4 49800 0 0 NaN \n", "... ... ... ... ... \n", "5010 92677 0 0 92677.0 \n", "5011 92219 8 1 92219.0 \n", "5012 49166 0 0 NaN \n", "5013 52299 1 6 NaN \n", "5014 56231 1 1 NaN \n", "\n", " percent_desconto0_6 Código_y percent_desconto0_7 \n", "0 0,00 52969.0 10,00 \n", "1 NaN 49496.0 10,00 \n", "2 0,00 NaN NaN \n", "3 NaN NaN NaN \n", "4 NaN 49800.0 10,00 \n", "... ... ... ... \n", "5010 0,00 NaN NaN \n", "5011 0,00 92219.0 10,00 \n", "5012 NaN 49166.0 10,00 \n", "5013 NaN 52299.0 10,00 \n", "5014 NaN 56231.0 10,00 | 43,25 \n", "\n", "[5015 rows x 17 columns]" ] }, "execution_count": 92, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_final = pd.merge(df_final,df_ciclo7[['Código','percent_desconto0_7']],left_on=\"SKU_FINAL\",right_on='Código',how=\"left\")\n", "\n", "df_final" ] }, { "cell_type": "code", "execution_count": 93, "metadata": {}, "outputs": [], "source": [ "df_final.drop(columns=['SKU2','SKU','Código_x','Código_y'],inplace = True)" ] }, { "cell_type": "code", "execution_count": 94, "metadata": {}, "outputs": [], "source": [ "df_final['COBERTURA_CALCULADA'] = round(df_final['COBERTURA_CALCULADA'],0)\n", "\n", "df_final['PREVISAO_VENDAS_45D'] = round(df_final['PREVISAO_VENDAS_45D'],0)\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 95, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['PDV', 'DESCRICAO', 'SKU_FINAL', 'ESTOQUE ATUAL', 'PREVISAO_VENDAS_45D',\n", " 'COBERTURA_CALCULADA', 'UF', 'PC', 'PV', 'Projeção Próximo Ciclo',\n", " 'Projeção Próximo Ciclo + 1', 'percent_desconto0_6',\n", " 'percent_desconto0_7'],\n", " dtype='object')" ] }, "execution_count": 95, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_final.columns" ] }, { "cell_type": "code", "execution_count": 97, "metadata": {}, "outputs": [], "source": [ "df_final['percent_desconto0_6'] = df_final['percent_desconto0_6'].fillna(\"0,00\")\n", "df_final['percent_desconto0_7'] = df_final['percent_desconto0_7'].fillna(\"0,00\")" ] }, { "cell_type": "code", "execution_count": 100, "metadata": {}, "outputs": [], "source": [ "df_final = df_final.rename(columns= {'percent_desconto0_6':'% DESCONTO CICLO 06','percent_desconto0_7':'% DESCONTO CICLO 07','SKU_FINAL':'SKU'})" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "ordem = ['UF','PDV', 'SKU', 'DESCRICAO', 'PC', 'PV', 'ESTOQUE ATUAL', 'PREVISAO_VENDAS_45D','COBERTURA_CALCULADA', 'Projeção Próximo Ciclo','Projeção Próximo Ciclo + 1', '% DESCONTO CICLO 06','% DESCONTO CICLO 07']\n", "\n", "df_final = df_final[ordem]" ] }, { "cell_type": "code", "execution_count": 107, "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", "
PDVSKUDESCRICAOUFPCPVESTOQUE ATUALPREVISAO_VENDAS_45DCOBERTURA_CALCULADAProjeção Próximo CicloProjeção Próximo Ciclo + 1% DESCONTO CICLO 06% DESCONTO CICLO 07
02096852969AURIEN DES COL GOLD 100ml V2SE35.76184.9017.02.0340.0000,0010,00
12096849496AURIEN DES COL RUBRA 100ml V3SE35.76184.9017.05.0142.0000,0010,00
22096849485AURIEN LOC ILUM DES CPO GOLD 200ml V2SE9.9752.991.00.01000.0000,000,00
32096852885CHIC DES ANTIT AEROSSOL 125ml V2SE6.7835.9918.00.01000.0000,000,00
42096849800CHIC DES COL 95ml V2SE23.19119.905.03.083.0000,0010,00
\n", "
" ], "text/plain": [ " PDV SKU DESCRICAO UF PC PV \\\n", "0 20968 52969 AURIEN DES COL GOLD 100ml V2 SE 35.76 184.90 \n", "1 20968 49496 AURIEN DES COL RUBRA 100ml V3 SE 35.76 184.90 \n", "2 20968 49485 AURIEN LOC ILUM DES CPO GOLD 200ml V2 SE 9.97 52.99 \n", "3 20968 52885 CHIC DES ANTIT AEROSSOL 125ml V2 SE 6.78 35.99 \n", "4 20968 49800 CHIC DES COL 95ml V2 SE 23.19 119.90 \n", "\n", " ESTOQUE ATUAL PREVISAO_VENDAS_45D COBERTURA_CALCULADA \\\n", "0 17.0 2.0 340.0 \n", "1 17.0 5.0 142.0 \n", "2 1.0 0.0 1000.0 \n", "3 18.0 0.0 1000.0 \n", "4 5.0 3.0 83.0 \n", "\n", " Projeção Próximo Ciclo Projeção Próximo Ciclo + 1 % DESCONTO CICLO 06 \\\n", "0 0 0 0,00 \n", "1 0 0 0,00 \n", "2 0 0 0,00 \n", "3 0 0 0,00 \n", "4 0 0 0,00 \n", "\n", " % DESCONTO CICLO 07 \n", "0 10,00 \n", "1 10,00 \n", "2 0,00 \n", "3 0,00 \n", "4 10,00 " ] }, "execution_count": 107, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_final.head()" ] }, { "cell_type": "code", "execution_count": 108, "metadata": {}, "outputs": [], "source": [ "df_final.to_excel(r\"C:\\Users\\roberto.alves\\Documents\\arquivos importantes\\ESTUDO_BAZAR_02.04.25\\bazar_eudora.xlsx\",index=False)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.13.2" } }, "nbformat": 4, "nbformat_minor": 2 }