{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "6ad35669", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np \n", "import glob\n", "import os \n", "from datetime import datetime" ] }, { "cell_type": "code", "execution_count": 2, "id": "fa16d50c", "metadata": {}, "outputs": [], "source": [ "hoje = datetime.today().strftime('%Y-%m-%d')" ] }, { "cell_type": "code", "execution_count": 3, "id": "9fcdc77a", "metadata": {}, "outputs": [], "source": [ "calendario = pd.read_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\BD_LANÇAMENTOS\\BASE DE DADOS LANÇAMENTO\\BOT\\CICLO 9\\CALENDARIO_CICLO\\Ciclo_Expandido_com_Datas.xlsx\")\n", "\n", "calendario['Date'] = pd.to_datetime(calendario['Date'])\n", "\n", "# Get today (normalized to midnight)\n", "today = pd.Timestamp(\"today\").normalize()\n", "\n", "calendario['NUM_CICLO'] = calendario['Ciclo'].str[-2:].astype(int)\n", "\n", "calendario['ANO_CICLO'] = calendario['Ciclo'].str[0:5]\n", "\n", "calendario = calendario[calendario['MARCA'] == \"BOTICARIO\"]\n", "\n", "calendario['CICLOMAIS2'] = calendario['ANO_CICLO'].astype(str) + (calendario['NUM_CICLO'].astype(int) + 3).astype(str).str.zfill(2) #<<< MUDAR O \"4\" (CICLO ATUAL + 4 PARA ACHAR O CICLO DA SUGESTÃO) EX: C202505 -> C202509\n", "ciclo_mais2 = calendario[calendario['Date'].dt.normalize() == today]['CICLOMAIS2'].iloc[0]\n", "\n", "# Filter rows where date matches today\n", "filtered_calendario = calendario[calendario['Ciclo'] == ciclo_mais2][:1]\n", "\n", "filtered_calendario['dias_ate_inicio'] = filtered_calendario['INICIO CICLO'].iloc[0] - today\n", "\n", "filtered_calendario['dias_ate_inicio'] = filtered_calendario['dias_ate_inicio'].dt.days.astype(int)\n", "\n", "filtered_calendario['match'] = 1\n" ] }, { "cell_type": "code", "execution_count": 4, "id": "bbec229d", "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", "
CicloINICIO CICLOFIM CICLODURAÇÃOMARCADateNUM_CICLOANO_CICLOCICLOMAIS2dias_ate_iniciomatch
2409C2025152025-10-132025-11-0221BOTICARIO2025-10-1315C2025C202518591
\n", "
" ], "text/plain": [ " Ciclo INICIO CICLO FIM CICLO DURAÇÃO MARCA Date \\\n", "2409 C202515 2025-10-13 2025-11-02 21 BOTICARIO 2025-10-13 \n", "\n", " NUM_CICLO ANO_CICLO CICLOMAIS2 dias_ate_inicio match \n", "2409 15 C2025 C202518 59 1 " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "filtered_calendario" ] }, { "cell_type": "code", "execution_count": 5, "id": "0245ed28", "metadata": {}, "outputs": [], "source": [ "ciclo_lanc = filtered_calendario['Ciclo'].max()" ] }, { "cell_type": "code", "execution_count": 6, "id": "7a3c1e6f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'C202515'" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ciclo_lanc" ] }, { "cell_type": "code", "execution_count": 7, "id": "61ffc777", "metadata": {}, "outputs": [], "source": [ "df_similares = pd.read_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\BD_LANÇAMENTOS\\BOT\\BOT - C15\\arquivos para geração da sugestão\\SIMILARES\\PRODUTOS SIMILARES - BOT.xlsx\")\n", "\n", "df_similares = pd.merge(left=df_similares,right=calendario[['Ciclo','INICIO CICLO','FIM CICLO','DURAÇÃO']], how= 'left', left_on = 'CICLO SIMILAR',right_on = 'Ciclo' )\n", "\n", "df_similares = df_similares.drop(columns=['Ciclo'])\n", "\n", "df_similares = df_similares.rename(columns={'INICIO CICLO':'INICIO CICLO SIMILAR','FIM CICLO':'FIM CICLO SIMILAR','DURAÇÃO':'DURAÇÃO CICLO SIMILAR'})\n", "df_similares.drop_duplicates(inplace=True)\n", "\n", "df_similares['MATCH'] = 1\n", "\n", "df_similares = df_similares.drop(columns=['INICIO DO CICLO', 'FIM DO CICLO', 'DURAÇÃO CICLO','INICIO CICLO SIMILAR','FIM CICLO SIMILAR','DURAÇÃO CICLO SIMILAR'])" ] }, { "cell_type": "code", "execution_count": 8, "id": "ad836441", "metadata": {}, "outputs": [], "source": [ "df_similares['PRODUTO SIMILAR'] = df_similares['PRODUTO SIMILAR'].astype('str')\n", "\n", "df_similares['PRODUTO SIMILAR'] = df_similares['PRODUTO SIMILAR'].replace(r'\\.0$', '', regex=True)\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 9, "id": "1fdd05a3", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "PRODUTO SIMILAR\n", "52004 1\n", "52008 1\n", "52005 1\n", "72929 1\n", "53389 1\n", "57474 1\n", "52012 1\n", "58138 1\n", "49973 1\n", "1006 1\n", "53342 1\n", "47963 1\n", "84056 1\n", "25458 1\n", "48136 1\n", "51448 1\n", "1004 1\n", "58373 1\n", "75792 1\n", "55659 1\n", "48635 1\n", "48621 1\n", "59306 1\n", "49225 1\n", "49228 1\n", "57759 1\n", "55766 1\n", "87000 1\n", "87771 1\n", "Name: count, dtype: int64" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\n", "\n", "df_similares = df_similares[df_similares['PRODUTO SIMILAR']!= 'nan']\n", "\n", "df_similares['PRODUTO SIMILAR'].value_counts()" ] }, { "cell_type": "code", "execution_count": 10, "id": "99ea95e6", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['PRODUTO LANÇAMENTO', 'DESCRIÇÃO DO LANÇAMENTO', 'PRODUTO SIMILAR',\n", " 'DESCRIÇÃO SIMILAR', 'CICLO SIMILAR', 'FOCO', 'IAF', 'CATEGORIA',\n", " 'MARCA', '% CONSUMIDOR', 'MECANICA CONSUMIDOR', '% REVENDEDOR',\n", " 'MECANICA REVENDEDOR', 'TIPO DE PRODUTO', 'MATCH'],\n", " dtype='object')" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_similares.columns" ] }, { "cell_type": "code", "execution_count": 11, "id": "fe922f62", "metadata": {}, "outputs": [], "source": [ "df_tabela = pd.read_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\BD_LANÇAMENTOS\\BOT\\BOT - C14\\arquivos para geração da sugestão\\TABELA DE PEDIDO\\Pedidos Semanais Especiais - BOT - 202514.xlsx\")\n", "\n", "df_tabela = df_tabela[df_tabela['Região'] == 'NNE'] \n", "\n", "df_tabela = df_tabela[(df_tabela['Canal'] != 'Ecomm') | (df_tabela['Canal'] != 'Ecomm | VD') | (df_tabela['Canal'] != 'Ecomm | Loja')] \n", "\n", "df_tabela['Canal'] = np.where((df_tabela['Canal'] == \"Loja\") | (df_tabela['Canal'] == \"Todos\") | (df_tabela['Canal'] == \"Loja | VD\"),\"TODOS\",\"VD\")\n", "\n", "df_tabela = df_tabela[df_tabela['Tipo de promoção'].str.contains('Lançamentos', na=False)]" ] }, { "cell_type": "code", "execution_count": 12, "id": "e0c55962", "metadata": {}, "outputs": [], "source": [ "df_pdv = pd.read_excel(r\"C:\\Users\\joao.herculano\\Documents\\PDV_ATT.xlsx\")\n", "df_pdv = df_pdv[~df_pdv['PDV'].isin(['910173', '910291'])]\n", "\n", "df_pdv_origi = pd.read_excel(r\"C:\\Users\\joao.herculano\\Documents\\PDV_ATT.xlsx\")\n", "df_pdv_origi = df_pdv_origi[~df_pdv_origi['PDV'].isin(['910173', '910291'])]" ] }, { "cell_type": "code", "execution_count": 13, "id": "f93735d1", "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", "
PDVCANALDESCRIÇÃOPDV DESCREGIÃOESTADOCIDADEUFMARCAANALISTAGESTÃOSUPERVISORSTATUS
8224293HIBCOMERCIO-HIB MORRO DO CHAPEUNaNNaNNaNNaNBA3O BOTICARIOMARCYARAAlyssonArianne Sodré [Provisório]ATIVO
\n", "
" ], "text/plain": [ " PDV CANAL DESCRIÇÃO PDV DESC REGIÃO ESTADO CIDADE \\\n", "82 24293 HIB COMERCIO-HIB MORRO DO CHAPEU NaN NaN NaN NaN \n", "\n", " UF MARCA ANALISTA GESTÃO SUPERVISOR STATUS \n", "82 BA3 O BOTICARIO MARCYARA Alysson Arianne Sodré [Provisório] ATIVO " ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_pdv[df_pdv['PDV']==24293]" ] }, { "cell_type": "code", "execution_count": 14, "id": "a3a045d9", "metadata": {}, "outputs": [], "source": [ "\n", "\n", "df_pdv = df_pdv.rename(columns={'DESCRIÇÃO':'DESCRIÇÃO PDV'})\n", "\n", "df_pdv = df_pdv.drop(columns=['REGIÃO', 'ESTADO','CIDADE','GESTÃO','MARCA'])\n", "\n", "df_pdv['UF'] = np.where(df_pdv['UF'] == 'VDC','BA',df_pdv['UF'])\n", "\n", "#ignorando a PDV que ainda não está online\n", "df_pdv = df_pdv[df_pdv['DESCRIÇÃO PDV'] != '23813-COMERCIO-HIB VALENTE']\n", "\n", "df_pdv = df_pdv[df_pdv['STATUS'] != \"INATIVO\"]\n", "\n", "df_pdv = df_pdv[df_pdv['STATUS'] != \"MATRIZ\"]\n", "\n", "df_pdv = df_pdv[df_pdv['SUPERVISOR'] != 'Inativa']\n", "\n", "df_pdv['MATCH'] = 1" ] }, { "cell_type": "code", "execution_count": 15, "id": "df04a501", "metadata": {}, "outputs": [], "source": [ "df_similares = pd.merge(left=df_similares,right=df_pdv,right_on=['MATCH'],left_on=['MATCH'],how='inner')\n", "\n", "df_similares = df_similares.drop_duplicates()" ] }, { "cell_type": "code", "execution_count": 16, "id": "0da911af", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(141690, 47)" ] }, "execution_count": 16, "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\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\BD_LANÇAMENTOS\\BOT\\Bot - C13\\LANÇAMENTOS\\arquivos para geração da sugestão\\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", "\n", "df_draft['match'] = 1 \n", "\n", "df_draft.shape\n" ] }, { "cell_type": "code", "execution_count": 17, "id": "0c8c7493", "metadata": {}, "outputs": [], "source": [ "df_draft = df_draft.drop(columns=['Categoria'])" ] }, { "cell_type": "code", "execution_count": 18, "id": "91298cde", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['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 202509',\n", " 'Histórico de Vendas do Ciclo Atual'],\n", " dtype='object')" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_draft.columns[7:25]" ] }, { "cell_type": "code", "execution_count": 19, "id": "ed859826", "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", "
PDVClasseSKUDescriçãoSubcategoriaLançamentoDesativaçãoHistórico de Vendas do Ciclo 202410Histórico de Vendas do Ciclo 202411Histórico de Vendas do Ciclo 202412...Item DesativadoData Prevista RegularizaçãoCarteira Bloqueada Para Novos PedidosPlanogramaQuantidade por caixaPreço Sell InQuantidadeItem analisadoHistórico de Vendas do Ciclo 202409match
1224293C49014ACCORDES CREM DES HID CPO 200ml V2CUIDADOS COM O CORPONaNNaN000...Não0Não0.05417.490NãoNaN1
9024293C49016ACCORDES DES BDY SPR 100ml V6DESODORANTE FEMININONaNNaN000...Não0Não0.08516.770NãoNaN1
16824293B48141ACCORDES DES COL 80ml V5PERFUMARIA FEMININANaNNaN000...Não0Não0.04163.240NãoNaN1
24624293B51213ACCORDES DES COL HARMONIA 80ml V4PERFUMARIA FEMININANaNNaN000...NãoBaixo AtendimentoNão0.04163.240NãoNaN1
32424293E86017ARBO CREM PRE/POS BARBA 100gPRÉ-BARBEARC08NaN000...Não0Não0.08018.410NãoNaN1
..................................................................
14153524293E50571QDB SRUM FAC LEVANTA TUDO SKIN Q 30mlHIDRATANTES E TRATAMENTOSNaNNaN000...Não2025-08-18Não0.09931.640Não0.01
14156724293E50574QDB SRUM FAC PREENCHE TUDO SKIN 30mlHIDRATANTES E TRATAMENTOSNaNNaN000...Não0Não0.09931.640Não0.01
14159924293E9403QDB SRUM FAC TRIP COMB SKIN Q 30mlHIDRATANTES E TRATAMENTOSNaNNaN000...Não0Não0.09931.640Não0.01
14162924293E50568QDB SRUM REST FAC ACORD/GLOW SKIN Q 30mlHIDRATANTES E TRATAMENTOSNaNNaN000...Não2025-07-16Não0.09927.320Não0.01
14166124293E53912QDB TOALHA DEMAQ ALGFUNCIONAIS MAQUIAGEMNaNNaN000...Não0Não0.08417.770Não0.01
\n", "

2557 rows × 46 columns

\n", "
" ], "text/plain": [ " PDV Classe SKU Descrição \\\n", "12 24293 C 49014 ACCORDES CREM DES HID CPO 200ml V2 \n", "90 24293 C 49016 ACCORDES DES BDY SPR 100ml V6 \n", "168 24293 B 48141 ACCORDES DES COL 80ml V5 \n", "246 24293 B 51213 ACCORDES DES COL HARMONIA 80ml V4 \n", "324 24293 E 86017 ARBO CREM PRE/POS BARBA 100g \n", "... ... ... ... ... \n", "141535 24293 E 50571 QDB SRUM FAC LEVANTA TUDO SKIN Q 30ml \n", "141567 24293 E 50574 QDB SRUM FAC PREENCHE TUDO SKIN 30ml \n", "141599 24293 E 9403 QDB SRUM FAC TRIP COMB SKIN Q 30ml \n", "141629 24293 E 50568 QDB SRUM REST FAC ACORD/GLOW SKIN Q 30ml \n", "141661 24293 E 53912 QDB TOALHA DEMAQ ALG \n", "\n", " Subcategoria Lançamento Desativação \\\n", "12 CUIDADOS COM O CORPO NaN NaN \n", "90 DESODORANTE FEMININO NaN NaN \n", "168 PERFUMARIA FEMININA NaN NaN \n", "246 PERFUMARIA FEMININA NaN NaN \n", "324 PRÉ-BARBEAR C08 NaN \n", "... ... ... ... \n", "141535 HIDRATANTES E TRATAMENTOS NaN NaN \n", "141567 HIDRATANTES E TRATAMENTOS NaN NaN \n", "141599 HIDRATANTES E TRATAMENTOS NaN NaN \n", "141629 HIDRATANTES E TRATAMENTOS NaN NaN \n", "141661 FUNCIONAIS MAQUIAGEM NaN NaN \n", "\n", " Histórico de Vendas do Ciclo 202410 \\\n", "12 0 \n", "90 0 \n", "168 0 \n", "246 0 \n", "324 0 \n", "... ... \n", "141535 0 \n", "141567 0 \n", "141599 0 \n", "141629 0 \n", "141661 0 \n", "\n", " Histórico de Vendas do Ciclo 202411 \\\n", "12 0 \n", "90 0 \n", "168 0 \n", "246 0 \n", "324 0 \n", "... ... \n", "141535 0 \n", "141567 0 \n", "141599 0 \n", "141629 0 \n", "141661 0 \n", "\n", " Histórico de Vendas do Ciclo 202412 ... Item Desativado \\\n", "12 0 ... Não \n", "90 0 ... Não \n", "168 0 ... Não \n", "246 0 ... Não \n", "324 0 ... Não \n", "... ... ... ... \n", "141535 0 ... Não \n", "141567 0 ... Não \n", "141599 0 ... Não \n", "141629 0 ... Não \n", "141661 0 ... Não \n", "\n", " Data Prevista Regularização Carteira Bloqueada Para Novos Pedidos \\\n", "12 0 Não \n", "90 0 Não \n", "168 0 Não \n", "246 Baixo Atendimento Não \n", "324 0 Não \n", "... ... ... \n", "141535 2025-08-18 Não \n", "141567 0 Não \n", "141599 0 Não \n", "141629 2025-07-16 Não \n", "141661 0 Não \n", "\n", " Planograma Quantidade por caixa Preço Sell In Quantidade \\\n", "12 0.0 54 17.49 0 \n", "90 0.0 85 16.77 0 \n", "168 0.0 41 63.24 0 \n", "246 0.0 41 63.24 0 \n", "324 0.0 80 18.41 0 \n", "... ... ... ... ... \n", "141535 0.0 99 31.64 0 \n", "141567 0.0 99 31.64 0 \n", "141599 0.0 99 31.64 0 \n", "141629 0.0 99 27.32 0 \n", "141661 0.0 84 17.77 0 \n", "\n", " Item analisado Histórico de Vendas do Ciclo 202409 match \n", "12 Não NaN 1 \n", "90 Não NaN 1 \n", "168 Não NaN 1 \n", "246 Não NaN 1 \n", "324 Não NaN 1 \n", "... ... ... ... \n", "141535 Não 0.0 1 \n", "141567 Não 0.0 1 \n", "141599 Não 0.0 1 \n", "141629 Não 0.0 1 \n", "141661 Não 0.0 1 \n", "\n", "[2557 rows x 46 columns]" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_draft[df_draft['PDV']==24293]" ] }, { "cell_type": "code", "execution_count": 20, "id": "34e179cb", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\joao.herculano\\AppData\\Local\\Temp\\ipykernel_101180\\1463083786.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_draft.groupby('PDV').apply(calcular_crescimento)\n" ] } ], "source": [ "# Define as colunas mensais\n", "colunas_mensais = df_draft.columns[7:25]\n", "\n", "# Agrupa por PDV e calcula crescimento médio por PDV\n", "def calcular_crescimento(grupo):\n", " soma_mensal = grupo[colunas_mensais].sum() # soma por mês\n", " variacao_mensal = soma_mensal.pct_change().dropna() # variação percentual mês a mês\n", " variacao_mensal = variacao_mensal[np.isfinite(variacao_mensal)]\n", "\n", " if len(variacao_mensal) == 0:\n", " return pd.Series({'CRESCIMENTO': np.nan})\n", "\n", " media = variacao_mensal.mean()\n", " desvio = variacao_mensal.std()\n", "\n", " limite_sup = media + 2 * desvio\n", " limite_inf = media - 2 * desvio\n", "\n", " variacoes_filtradas = variacao_mensal[variacao_mensal.between(limite_inf, limite_sup)]\n", " crescimento = round(variacoes_filtradas.mean(), 4)\n", " return pd.Series({'CRESCIMENTO': crescimento})\n", "\n", "# Aplica a função por PDV\n", "crescimento_por_pdv = df_draft.groupby('PDV').apply(calcular_crescimento)\n", "\n", "# Merge do resultado de volta no dataframe original\n", "df_draft = df_draft.merge(crescimento_por_pdv, on='PDV', how='left')\n" ] }, { "cell_type": "code", "execution_count": 21, "id": "94aa432f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 52004\n", "1 52004\n", "2 52004\n", "3 52004\n", "4 52004\n", "Name: PRODUTO SIMILAR, dtype: Int64" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_similares['PRODUTO SIMILAR'] = df_similares['PRODUTO SIMILAR'].astype('Int64')\n", "df_similares['PRODUTO SIMILAR'].head()" ] }, { "cell_type": "code", "execution_count": 22, "id": "4bc8c2b4", "metadata": {}, "outputs": [], "source": [ "df_similares['PDV'] = df_similares['PDV'].astype('Int64')\n", "\n", "df_final = pd.merge(left=df_similares,right=df_draft,right_on=['PDV', 'SKU'],left_on=['PDV','PRODUTO SIMILAR'],how='left')" ] }, { "cell_type": "code", "execution_count": 23, "id": "aae416dd", "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", "
PRODUTO LANÇAMENTODESCRIÇÃO DO LANÇAMENTOPRODUTO SIMILARDESCRIÇÃO SIMILARCICLO SIMILARFOCOIAFCATEGORIAMARCA% CONSUMIDOR...Data Prevista RegularizaçãoCarteira Bloqueada Para Novos PedidosPlanogramaQuantidade por caixaPreço Sell InQuantidadeItem analisadoHistórico de Vendas do Ciclo 202409matchCRESCIMENTO
059823NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...52004NSPA LOC RAD DES HID CPO AMEI DOUR 400mlC202315SimSimCUIDADOS COM A PELENATIVA SPA31,07 | 39,52...0Não3.030.023.620.0NãoNaN1.0-0.0154
159823NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...52004NSPA LOC RAD DES HID CPO AMEI DOUR 400mlC202315SimSimCUIDADOS COM A PELENATIVA SPA31,07 | 39,52...0Não3.030.023.629.0NãoNaN1.0-0.0341
259823NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...52004NSPA LOC RAD DES HID CPO AMEI DOUR 400mlC202315SimSimCUIDADOS COM A PELENATIVA SPA31,07 | 39,52...0Não3.030.023.624.0NãoNaN1.0-0.0138
359823NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...52004NSPA LOC RAD DES HID CPO AMEI DOUR 400mlC202315SimSimCUIDADOS COM A PELENATIVA SPA31,07 | 39,52...0Não0.030.023.620.0NãoNaN1.0-0.0595
459823NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...52004NSPA LOC RAD DES HID CPO AMEI DOUR 400mlC202315SimSimCUIDADOS COM A PELENATIVA SPA31,07 | 39,52...0Não3.030.023.621.0NãoNaN1.0-0.0171
..................................................................
228687771MAKE B BLUSH COMP BERRY MINI PRM 1,5g8777100NãoNãoSUPORTE À VENDAMAKE B.-...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
228787771MAKE B BLUSH COMP BERRY MINI PRM 1,5g8777100NãoNãoSUPORTE À VENDAMAKE B.-...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
228887771MAKE B BLUSH COMP BERRY MINI PRM 1,5g8777100NãoNãoSUPORTE À VENDAMAKE B.-...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
228987771MAKE B BLUSH COMP BERRY MINI PRM 1,5g8777100NãoNãoSUPORTE À VENDAMAKE B.-...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
229087771MAKE B BLUSH COMP BERRY MINI PRM 1,5g8777100NãoNãoSUPORTE À VENDAMAKE B.-...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
\n", "

2291 rows × 69 columns

\n", "
" ], "text/plain": [ " PRODUTO LANÇAMENTO DESCRIÇÃO DO LANÇAMENTO \\\n", "0 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n", "1 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n", "2 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n", "3 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n", "4 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n", "... ... ... \n", "2286 87771 MAKE B BLUSH COMP BERRY MINI PRM 1,5g \n", "2287 87771 MAKE B BLUSH COMP BERRY MINI PRM 1,5g \n", "2288 87771 MAKE B BLUSH COMP BERRY MINI PRM 1,5g \n", "2289 87771 MAKE B BLUSH COMP BERRY MINI PRM 1,5g \n", "2290 87771 MAKE B BLUSH COMP BERRY MINI PRM 1,5g \n", "\n", " PRODUTO SIMILAR DESCRIÇÃO SIMILAR CICLO SIMILAR \\\n", "0 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n", "1 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n", "2 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n", "3 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n", "4 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n", "... ... ... ... \n", "2286 87771 0 0 \n", "2287 87771 0 0 \n", "2288 87771 0 0 \n", "2289 87771 0 0 \n", "2290 87771 0 0 \n", "\n", " FOCO IAF CATEGORIA MARCA % CONSUMIDOR ... \\\n", "0 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... \n", "1 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... \n", "2 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... \n", "3 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... \n", "4 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... \n", "... ... ... ... ... ... ... \n", "2286 Não Não SUPORTE À VENDA MAKE B. - ... \n", "2287 Não Não SUPORTE À VENDA MAKE B. - ... \n", "2288 Não Não SUPORTE À VENDA MAKE B. - ... \n", "2289 Não Não SUPORTE À VENDA MAKE B. - ... \n", "2290 Não Não SUPORTE À VENDA MAKE B. - ... \n", "\n", " Data Prevista Regularização Carteira Bloqueada Para Novos Pedidos \\\n", "0 0 Não \n", "1 0 Não \n", "2 0 Não \n", "3 0 Não \n", "4 0 Não \n", "... ... ... \n", "2286 NaN NaN \n", "2287 NaN NaN \n", "2288 NaN NaN \n", "2289 NaN NaN \n", "2290 NaN NaN \n", "\n", " Planograma Quantidade por caixa Preço Sell In Quantidade \\\n", "0 3.0 30.0 23.62 0.0 \n", "1 3.0 30.0 23.62 9.0 \n", "2 3.0 30.0 23.62 4.0 \n", "3 0.0 30.0 23.62 0.0 \n", "4 3.0 30.0 23.62 1.0 \n", "... ... ... ... ... \n", "2286 NaN NaN NaN NaN \n", "2287 NaN NaN NaN NaN \n", "2288 NaN NaN NaN NaN \n", "2289 NaN NaN NaN NaN \n", "2290 NaN NaN NaN NaN \n", "\n", " Item analisado Histórico de Vendas do Ciclo 202409 match CRESCIMENTO \n", "0 Não NaN 1.0 -0.0154 \n", "1 Não NaN 1.0 -0.0341 \n", "2 Não NaN 1.0 -0.0138 \n", "3 Não NaN 1.0 -0.0595 \n", "4 Não NaN 1.0 -0.0171 \n", "... ... ... ... ... \n", "2286 NaN NaN NaN NaN \n", "2287 NaN NaN NaN NaN \n", "2288 NaN NaN NaN NaN \n", "2289 NaN NaN NaN NaN \n", "2290 NaN NaN NaN NaN \n", "\n", "[2291 rows x 69 columns]" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_final" ] }, { "cell_type": "code", "execution_count": 24, "id": "2c9f011d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "PRODUTO SIMILAR\n", "52004 79\n", "52008 79\n", "52005 79\n", "72929 79\n", "53389 79\n", "57474 79\n", "52012 79\n", "58138 79\n", "49973 79\n", "1006 79\n", "53342 79\n", "47963 79\n", "84056 79\n", "25458 79\n", "48136 79\n", "51448 79\n", "1004 79\n", "58373 79\n", "75792 79\n", "55659 79\n", "48635 79\n", "48621 79\n", "59306 79\n", "49225 79\n", "49228 79\n", "57759 79\n", "55766 79\n", "87000 79\n", "87771 79\n", "Name: count, dtype: Int64" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_similares= df_similares[df_similares['PRODUTO SIMILAR'].notna()]\n", "\n", "df_similares['PRODUTO SIMILAR'].value_counts()" ] }, { "cell_type": "code", "execution_count": 25, "id": "0ff66803", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "SKU\n", "52004.0 77\n", "52008.0 77\n", "52005.0 77\n", "53389.0 77\n", "52012.0 77\n", "58138.0 77\n", "49973.0 77\n", "47963.0 77\n", "84056.0 77\n", "25458.0 77\n", "48136.0 77\n", "51448.0 77\n", "1004.0 77\n", "75792.0 77\n", "55659.0 77\n", "48635.0 77\n", "48621.0 77\n", "59306.0 77\n", "57759.0 77\n", "55766.0 77\n", "Name: count, dtype: int64" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_final['SKU'].value_counts()" ] }, { "cell_type": "code", "execution_count": 26, "id": "c1451562", "metadata": {}, "outputs": [], "source": [ "#df_venda_diaria = pd.read_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\BD_LANÇAMENTOS\\BOT\\BOT - C12\\LANÇAMENTOS\\arquivos para geração da sugestão\\VENDAS_DIARIAS\\FormFiltroConsultaVendaSintetica_17_06_2025_14_04_40.xls\")\n", "#df_venda_diaria.shape" ] }, { "cell_type": "code", "execution_count": 27, "id": "64bde00b", "metadata": {}, "outputs": [], "source": [ "df_venda_diaria = pd.read_csv(\n", " r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\BD_LANÇAMENTOS\\BOT\\BOT - C15\\arquivos para geração da sugestão\\VENDAS_DIARIAS\\vendas 20250815.csv\",\n", " sep=';',\n", " dtype={'SKU_2': str},decimal=',')" ] }, { "cell_type": "code", "execution_count": 28, "id": "6ab155b5", "metadata": {}, "outputs": [], "source": [ "df_venda_diaria['VENDAS_CICLO'] = df_venda_diaria['VENDAS_CICLO'].str.replace(r'\\.', '', regex=True)" ] }, { "cell_type": "code", "execution_count": 29, "id": "1d25e5df", "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", "
PDVSKUDESCRICAOVENDAS_CICLOCiclo
01252251.944COFFEE DES COL MAN SEDUC TCH PRM 10ml11C202307
12099877.557QDB BASE LIQ SUPERMAT COR 06 Q 30ml RPCK1C202405
22085874.103GLAMOUR DES COL SEC BL 75ml V45C202409
3569947.950ZAAD EDP 95ml V612C202406
42099350.297ESTJ DEM LILY ESSENCE 4x4ml2C202416
\n", "
" ], "text/plain": [ " PDV SKU DESCRICAO VENDAS_CICLO \\\n", "0 12522 51.944 COFFEE DES COL MAN SEDUC TCH PRM 10ml 11 \n", "1 20998 77.557 QDB BASE LIQ SUPERMAT COR 06 Q 30ml RPCK 1 \n", "2 20858 74.103 GLAMOUR DES COL SEC BL 75ml V4 5 \n", "3 5699 47.950 ZAAD EDP 95ml V6 12 \n", "4 20993 50.297 ESTJ DEM LILY ESSENCE 4x4ml 2 \n", "\n", " Ciclo \n", "0 C202307 \n", "1 C202405 \n", "2 C202409 \n", "3 C202406 \n", "4 C202416 " ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_venda_diaria.head()" ] }, { "cell_type": "code", "execution_count": 30, "id": "5d0d79f2", "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", "
PDVSKUDESCRICAOVendas_TotalCiclo
01252251.944COFFEE DES COL MAN SEDUC TCH PRM 10ml11C202307
12099877.557QDB BASE LIQ SUPERMAT COR 06 Q 30ml RPCK1C202405
22085874.103GLAMOUR DES COL SEC BL 75ml V45C202409
3569947.950ZAAD EDP 95ml V612C202406
42099350.297ESTJ DEM LILY ESSENCE 4x4ml2C202416
\n", "
" ], "text/plain": [ " PDV SKU DESCRICAO Vendas_Total \\\n", "0 12522 51.944 COFFEE DES COL MAN SEDUC TCH PRM 10ml 11 \n", "1 20998 77.557 QDB BASE LIQ SUPERMAT COR 06 Q 30ml RPCK 1 \n", "2 20858 74.103 GLAMOUR DES COL SEC BL 75ml V4 5 \n", "3 5699 47.950 ZAAD EDP 95ml V6 12 \n", "4 20993 50.297 ESTJ DEM LILY ESSENCE 4x4ml 2 \n", "\n", " Ciclo \n", "0 C202307 \n", "1 C202405 \n", "2 C202409 \n", "3 C202406 \n", "4 C202416 " ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#df_venda_diaria['Ciclo'] = df_venda_diaria['Ciclo'].str.replace(\"C\",\"C20\") \n", "\n", "df_venda_diaria = df_venda_diaria.rename(columns={'VENDAS_CICLO':'Vendas_Total'})\n", "\n", "df_venda_diaria.head()" ] }, { "cell_type": "code", "execution_count": 31, "id": "a93427da", "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", "
PDVSKUDESCRICAOVendas_TotalCiclo
01252251.944COFFEE DES COL MAN SEDUC TCH PRM 10ml11C202307
12099877.557QDB BASE LIQ SUPERMAT COR 06 Q 30ml RPCK1C202405
22085874.103GLAMOUR DES COL SEC BL 75ml V45C202409
3569947.950ZAAD EDP 95ml V612C202406
42099350.297ESTJ DEM LILY ESSENCE 4x4ml2C202416
\n", "
" ], "text/plain": [ " PDV SKU DESCRICAO Vendas_Total \\\n", "0 12522 51.944 COFFEE DES COL MAN SEDUC TCH PRM 10ml 11 \n", "1 20998 77.557 QDB BASE LIQ SUPERMAT COR 06 Q 30ml RPCK 1 \n", "2 20858 74.103 GLAMOUR DES COL SEC BL 75ml V4 5 \n", "3 5699 47.950 ZAAD EDP 95ml V6 12 \n", "4 20993 50.297 ESTJ DEM LILY ESSENCE 4x4ml 2 \n", "\n", " Ciclo \n", "0 C202307 \n", "1 C202405 \n", "2 C202409 \n", "3 C202406 \n", "4 C202416 " ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_venda_diaria['Vendas_Total'] = df_venda_diaria['Vendas_Total'].str.replace(',', '.', regex=False)\n", "\n", "df_venda_diaria['Vendas_Total'] = df_venda_diaria['Vendas_Total'].astype('float')\n", "\n", "df_venda_diaria['Vendas_Total'] = round(df_venda_diaria['Vendas_Total'],0)\n", "\n", "df_venda_diaria['Vendas_Total'] = df_venda_diaria['Vendas_Total'].astype(str)\n", "\n", "df_venda_diaria['Vendas_Total'] = (\n", " df_venda_diaria['Vendas_Total']\n", " .str.replace('.0', '', regex=False)\n", " .str.replace('.', '', regex=False)\n", " .astype('Int64')\n", ")\n", "\n", "\n", "df_venda_diaria.head()" ] }, { "cell_type": "code", "execution_count": 32, "id": "6ddec856", "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", "
PDVSKUDESCRICAOVendas_TotalCiclo
01252251.944COFFEE DES COL MAN SEDUC TCH PRM 10ml11C202307
12099877.557QDB BASE LIQ SUPERMAT COR 06 Q 30ml RPCK1C202405
22085874.103GLAMOUR DES COL SEC BL 75ml V45C202409
3569947.950ZAAD EDP 95ml V612C202406
42099350.297ESTJ DEM LILY ESSENCE 4x4ml2C202416
\n", "
" ], "text/plain": [ " PDV SKU DESCRICAO Vendas_Total \\\n", "0 12522 51.944 COFFEE DES COL MAN SEDUC TCH PRM 10ml 11 \n", "1 20998 77.557 QDB BASE LIQ SUPERMAT COR 06 Q 30ml RPCK 1 \n", "2 20858 74.103 GLAMOUR DES COL SEC BL 75ml V4 5 \n", "3 5699 47.950 ZAAD EDP 95ml V6 12 \n", "4 20993 50.297 ESTJ DEM LILY ESSENCE 4x4ml 2 \n", "\n", " Ciclo \n", "0 C202307 \n", "1 C202405 \n", "2 C202409 \n", "3 C202406 \n", "4 C202416 " ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_venda_diaria2 = df_venda_diaria.pivot_table(\n", " index=[\"PDV\", \"SKU\", \"DESCRICAO\"],\n", " columns=\"Ciclo\",\n", " values=\"Vendas_Total\",\n", " fill_value=0\n", ").reset_index()\n", "\n", "# Se quiser, reorganize as colunas colocando os ciclos ao final\n", "df_venda_diaria.columns.name = None\n", "\n", "df_venda_diaria.head()" ] }, { "cell_type": "code", "execution_count": 33, "id": "882e68aa", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['PDV', 'SKU', 'DESCRICAO', 'Vendas_Total', 'Ciclo'], dtype='object')" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_venda_diaria.columns" ] }, { "cell_type": "code", "execution_count": 34, "id": "0c288d75", "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", "
PDVSKUDESCRICAOVendas_TotalCiclo
01252251.944COFFEE DES COL MAN SEDUC TCH PRM 10ml11C202307
12099877.557QDB BASE LIQ SUPERMAT COR 06 Q 30ml RPCK1C202405
22085874.103GLAMOUR DES COL SEC BL 75ml V45C202409
3569947.950ZAAD EDP 95ml V612C202406
42099350.297ESTJ DEM LILY ESSENCE 4x4ml2C202416
..................
16633152099683.039QUASAR DES COL RUSH 100ml1C202415
16633162097052.025BOTI BABY SAB LIQ GLIC V2 400ml6C202511
16633172099693.069LA PIEL D/COL SPR CP PER AMBR DOUR 200ml10C202414
16633181342751.279MAKE B BAS LIQ C/ GLYC TX 140 30g1C202309
16633192127852.014CJ FLAC OUI EDP ICONIQUE INTENSE 3x1ml2C202511
\n", "

1663320 rows × 5 columns

\n", "
" ], "text/plain": [ " PDV SKU DESCRICAO \\\n", "0 12522 51.944 COFFEE DES COL MAN SEDUC TCH PRM 10ml \n", "1 20998 77.557 QDB BASE LIQ SUPERMAT COR 06 Q 30ml RPCK \n", "2 20858 74.103 GLAMOUR DES COL SEC BL 75ml V4 \n", "3 5699 47.950 ZAAD EDP 95ml V6 \n", "4 20993 50.297 ESTJ DEM LILY ESSENCE 4x4ml \n", "... ... ... ... \n", "1663315 20996 83.039 QUASAR DES COL RUSH 100ml \n", "1663316 20970 52.025 BOTI BABY SAB LIQ GLIC V2 400ml \n", "1663317 20996 93.069 LA PIEL D/COL SPR CP PER AMBR DOUR 200ml \n", "1663318 13427 51.279 MAKE B BAS LIQ C/ GLYC TX 140 30g \n", "1663319 21278 52.014 CJ FLAC OUI EDP ICONIQUE INTENSE 3x1ml \n", "\n", " Vendas_Total Ciclo \n", "0 11 C202307 \n", "1 1 C202405 \n", "2 5 C202409 \n", "3 12 C202406 \n", "4 2 C202416 \n", "... ... ... \n", "1663315 1 C202415 \n", "1663316 6 C202511 \n", "1663317 10 C202414 \n", "1663318 1 C202309 \n", "1663319 2 C202511 \n", "\n", "[1663320 rows x 5 columns]" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_venda_diaria" ] }, { "cell_type": "code", "execution_count": 35, "id": "c7ddaf20", "metadata": {}, "outputs": [], "source": [ "#df_venda_diaria['PDV'] = df_venda_diaria['Unidade de Negócio'].str.split(\"-\").str[0].str.strip()\n", "\n", "#df_venda_diaria['Dia'] = pd.to_datetime(df_venda_diaria['Dia'], format='%d/%m/%Y')\n", "\n", "#df_venda_diaria = pd.merge(left=df_venda_diaria,right=calendario[['Ciclo','Date']],left_on='Dia',right_on='Date',how='inner')\n", "\n", "#df_venda_diaria = df_venda_diaria.drop(columns='Date')\n", "\n", "#df_venda_diaria.shape" ] }, { "cell_type": "code", "execution_count": 36, "id": "7119556a", "metadata": {}, "outputs": [], "source": [ "# 'Dia' já está em formato datetime, então renomeamos para 'Data' diretamente\n", "# ou apenas usamos 'Dia' como referência de data\n", "\n", "# Ordena o DataFrame para garantir que a cumulativa funcione corretamente\n", "#df_venda_diaria = df_venda_diaria.sort_values(by=['Unidade de Negócio', 'Código do Produto', 'Dia'])\n", "\n", "# Calcula a quantidade acumulada até o dia para cada grupo\n", "#df_venda_diaria['Quantidade Acumulada'] = (df_venda_diaria.groupby(['Unidade de Negócio', 'Código do Produto'])['Quantidade'].cumsum()) # acumulado por grupo até a data da linha\n", "\n", "#df_venda_diaria.shape" ] }, { "cell_type": "code", "execution_count": 37, "id": "c707a1b6", "metadata": {}, "outputs": [], "source": [ "#df_venda_diaria = df_venda_diaria.drop_duplicates()\n", "\n", "#df_venda_agrupado = df_venda_diaria.fillna(0).groupby(['PDV', 'Código do Produto','Ciclo'])['Quantidade Acumulada'].max().reset_index()\n", "#df_venda_agrupado" ] }, { "cell_type": "code", "execution_count": 38, "id": "083ff829", "metadata": {}, "outputs": [], "source": [ "#df_venda_agrupado[(df_venda_agrupado['Ciclo']=='C202213')&(df_venda_agrupado['Código do Produto']==81054)&(df_venda_agrupado['PDV']=='20994')]" ] }, { "cell_type": "code", "execution_count": 39, "id": "59707396", "metadata": {}, "outputs": [], "source": [ "#df_venda_agrupado[['Ciclo','Código do Produto','PDV']].dtypes" ] }, { "cell_type": "code", "execution_count": 40, "id": "bdf6abbb", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "CICLO SIMILAR object\n", "PRODUTO SIMILAR Int64\n", "PDV Int64\n", "dtype: object" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_final[['CICLO SIMILAR','PRODUTO SIMILAR','PDV']].dtypes" ] }, { "cell_type": "code", "execution_count": 41, "id": "dc452c72", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(2291, 75)" ] }, "execution_count": 41, "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']], right_on='match',left_on='MATCH',how='left')\n", "df_final.shape" ] }, { "cell_type": "code", "execution_count": 42, "id": "c260e0e3", "metadata": {}, "outputs": [], "source": [ "#df_final = df_final.drop(columns=['PDV DESC','status','SKU','Descrição','Lançamento','Item analisado','Planograma','Quantidade por caixa'])" ] }, { "cell_type": "code", "execution_count": 43, "id": "c9de258b", "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", "
PRODUTO LANÇAMENTODESCRIÇÃO DO LANÇAMENTOPRODUTO SIMILARDESCRIÇÃO SIMILARCICLO SIMILARFOCOIAFCATEGORIAMARCA% CONSUMIDOR...Item analisadoHistórico de Vendas do Ciclo 202409match_xCRESCIMENTOCicloINICIO CICLOFIM CICLODURAÇÃOmatch_ydias_ate_inicio
059823NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...52004NSPA LOC RAD DES HID CPO AMEI DOUR 400mlC202315SimSimCUIDADOS COM A PELENATIVA SPA31,07 | 39,52...NãoNaN1.0-0.0154C2025152025-10-132025-11-0221159
159823NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...52004NSPA LOC RAD DES HID CPO AMEI DOUR 400mlC202315SimSimCUIDADOS COM A PELENATIVA SPA31,07 | 39,52...NãoNaN1.0-0.0341C2025152025-10-132025-11-0221159
259823NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...52004NSPA LOC RAD DES HID CPO AMEI DOUR 400mlC202315SimSimCUIDADOS COM A PELENATIVA SPA31,07 | 39,52...NãoNaN1.0-0.0138C2025152025-10-132025-11-0221159
359823NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...52004NSPA LOC RAD DES HID CPO AMEI DOUR 400mlC202315SimSimCUIDADOS COM A PELENATIVA SPA31,07 | 39,52...NãoNaN1.0-0.0595C2025152025-10-132025-11-0221159
459823NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...52004NSPA LOC RAD DES HID CPO AMEI DOUR 400mlC202315SimSimCUIDADOS COM A PELENATIVA SPA31,07 | 39,52...NãoNaN1.0-0.0171C2025152025-10-132025-11-0221159
\n", "

5 rows × 75 columns

\n", "
" ], "text/plain": [ " PRODUTO LANÇAMENTO DESCRIÇÃO DO LANÇAMENTO \\\n", "0 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n", "1 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n", "2 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n", "3 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n", "4 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n", "\n", " PRODUTO SIMILAR DESCRIÇÃO SIMILAR CICLO SIMILAR \\\n", "0 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n", "1 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n", "2 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n", "3 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n", "4 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n", "\n", " FOCO IAF CATEGORIA MARCA % CONSUMIDOR ... \\\n", "0 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... \n", "1 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... \n", "2 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... \n", "3 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... \n", "4 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... \n", "\n", " Item analisado Histórico de Vendas do Ciclo 202409 match_x CRESCIMENTO \\\n", "0 Não NaN 1.0 -0.0154 \n", "1 Não NaN 1.0 -0.0341 \n", "2 Não NaN 1.0 -0.0138 \n", "3 Não NaN 1.0 -0.0595 \n", "4 Não NaN 1.0 -0.0171 \n", "\n", " Ciclo INICIO CICLO FIM CICLO DURAÇÃO match_y dias_ate_inicio \n", "0 C202515 2025-10-13 2025-11-02 21 1 59 \n", "1 C202515 2025-10-13 2025-11-02 21 1 59 \n", "2 C202515 2025-10-13 2025-11-02 21 1 59 \n", "3 C202515 2025-10-13 2025-11-02 21 1 59 \n", "4 C202515 2025-10-13 2025-11-02 21 1 59 \n", "\n", "[5 rows x 75 columns]" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_final.head()" ] }, { "cell_type": "code", "execution_count": 44, "id": "8a05450c", "metadata": {}, "outputs": [], "source": [ "df_final = pd.merge(left=df_final, right=calendario[['Ciclo','INICIO CICLO','FIM CICLO','DURAÇÃO']], right_on='Ciclo',left_on='CICLO SIMILAR',how='left')\n", "df_final.shape\n", "\n", "df_final = df_final.drop_duplicates()" ] }, { "cell_type": "code", "execution_count": 45, "id": "cc65edab", "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", "
PDVSKUDESCRICAOVendas Ciclo LançamentoCiclo
01252251.944COFFEE DES COL MAN SEDUC TCH PRM 10ml11C202307
12099877.557QDB BASE LIQ SUPERMAT COR 06 Q 30ml RPCK1C202405
22085874.103GLAMOUR DES COL SEC BL 75ml V45C202409
3569947.950ZAAD EDP 95ml V612C202406
42099350.297ESTJ DEM LILY ESSENCE 4x4ml2C202416
\n", "
" ], "text/plain": [ " PDV SKU DESCRICAO \\\n", "0 12522 51.944 COFFEE DES COL MAN SEDUC TCH PRM 10ml \n", "1 20998 77.557 QDB BASE LIQ SUPERMAT COR 06 Q 30ml RPCK \n", "2 20858 74.103 GLAMOUR DES COL SEC BL 75ml V4 \n", "3 5699 47.950 ZAAD EDP 95ml V6 \n", "4 20993 50.297 ESTJ DEM LILY ESSENCE 4x4ml \n", "\n", " Vendas Ciclo Lançamento Ciclo \n", "0 11 C202307 \n", "1 1 C202405 \n", "2 5 C202409 \n", "3 12 C202406 \n", "4 2 C202416 " ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\n", "df_venda_diaria = df_venda_diaria.rename(columns={'Vendas_Total':'Vendas Ciclo Lançamento'})\n", "df_venda_diaria.head()" ] }, { "cell_type": "code", "execution_count": 46, "id": "6367ac21", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 C202315\n", "14 C202315\n", "28 C202315\n", "42 C202315\n", "56 C202315\n", " ... \n", "19192 0\n", "19193 0\n", "19194 0\n", "19195 0\n", "19196 0\n", "Name: CICLO SIMILAR, Length: 2291, dtype: object" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_final['CICLO SIMILAR'] = df_final['CICLO SIMILAR'].fillna('0')\n", "df_final['CICLO SIMILAR'] " ] }, { "cell_type": "code", "execution_count": 47, "id": "b0af59cb", "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", "
CICLO SIMILARPRODUTO SIMILARPDV
0C2023155200412522
14C2023155200412817
28C2023155200412818
42C2023155200412820
56C2023155200412823
\n", "
" ], "text/plain": [ " CICLO SIMILAR PRODUTO SIMILAR PDV\n", "0 C202315 52004 12522\n", "14 C202315 52004 12817\n", "28 C202315 52004 12818\n", "42 C202315 52004 12820\n", "56 C202315 52004 12823" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_final[['CICLO SIMILAR','PRODUTO SIMILAR','PDV']].head()" ] }, { "cell_type": "code", "execution_count": 48, "id": "72925ca7", "metadata": {}, "outputs": [], "source": [ "\n", "\n", "df_final['PRODUTO SIMILAR'] = df_final['PRODUTO SIMILAR'].astype('Int64')\n", "\n" ] }, { "cell_type": "code", "execution_count": 49, "id": "8b0bb174", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['PRODUTO LANÇAMENTO', 'DESCRIÇÃO DO LANÇAMENTO', 'PRODUTO SIMILAR',\n", " 'DESCRIÇÃO SIMILAR', 'CICLO SIMILAR', 'FOCO', 'IAF', 'CATEGORIA',\n", " 'MARCA', '% CONSUMIDOR', 'MECANICA CONSUMIDOR', '% REVENDEDOR',\n", " 'MECANICA REVENDEDOR', 'TIPO DE PRODUTO', 'MATCH', 'PDV', 'CANAL',\n", " 'DESCRIÇÃO PDV', 'PDV DESC', 'UF', 'ANALISTA', 'SUPERVISOR', 'STATUS',\n", " 'Classe', 'SKU', 'Descrição', 'Subcategoria', 'Lançamento',\n", " 'Desativação', '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 202509',\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 202409', 'match_x',\n", " 'CRESCIMENTO', 'Ciclo_x', 'INICIO CICLO_x', 'FIM CICLO_x', 'DURAÇÃO_x',\n", " 'match_y', 'dias_ate_inicio', 'Ciclo_y', 'INICIO CICLO_y',\n", " 'FIM CICLO_y', 'DURAÇÃO_y'],\n", " dtype='object')" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_final.columns" ] }, { "cell_type": "code", "execution_count": 50, "id": "3d924087", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 52004\n", "14 52004\n", "28 52004\n", "42 52004\n", "56 52004\n", " ... \n", "19192 87771\n", "19193 87771\n", "19194 87771\n", "19195 87771\n", "19196 87771\n", "Name: PRODUTO SIMILAR, Length: 2291, dtype: Int64" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_final['PRODUTO SIMILAR']" ] }, { "cell_type": "code", "execution_count": 51, "id": "c34b541a", "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", "
PDVSKUDESCRICAOVendas Ciclo LançamentoCiclo
01252251.944COFFEE DES COL MAN SEDUC TCH PRM 10ml11C202307
12099877.557QDB BASE LIQ SUPERMAT COR 06 Q 30ml RPCK1C202405
22085874.103GLAMOUR DES COL SEC BL 75ml V45C202409
3569947.950ZAAD EDP 95ml V612C202406
42099350.297ESTJ DEM LILY ESSENCE 4x4ml2C202416
..................
16633152099683.039QUASAR DES COL RUSH 100ml1C202415
16633162097052.025BOTI BABY SAB LIQ GLIC V2 400ml6C202511
16633172099693.069LA PIEL D/COL SPR CP PER AMBR DOUR 200ml10C202414
16633181342751.279MAKE B BAS LIQ C/ GLYC TX 140 30g1C202309
16633192127852.014CJ FLAC OUI EDP ICONIQUE INTENSE 3x1ml2C202511
\n", "

1663320 rows × 5 columns

\n", "
" ], "text/plain": [ " PDV SKU DESCRICAO \\\n", "0 12522 51.944 COFFEE DES COL MAN SEDUC TCH PRM 10ml \n", "1 20998 77.557 QDB BASE LIQ SUPERMAT COR 06 Q 30ml RPCK \n", "2 20858 74.103 GLAMOUR DES COL SEC BL 75ml V4 \n", "3 5699 47.950 ZAAD EDP 95ml V6 \n", "4 20993 50.297 ESTJ DEM LILY ESSENCE 4x4ml \n", "... ... ... ... \n", "1663315 20996 83.039 QUASAR DES COL RUSH 100ml \n", "1663316 20970 52.025 BOTI BABY SAB LIQ GLIC V2 400ml \n", "1663317 20996 93.069 LA PIEL D/COL SPR CP PER AMBR DOUR 200ml \n", "1663318 13427 51.279 MAKE B BAS LIQ C/ GLYC TX 140 30g \n", "1663319 21278 52.014 CJ FLAC OUI EDP ICONIQUE INTENSE 3x1ml \n", "\n", " Vendas Ciclo Lançamento Ciclo \n", "0 11 C202307 \n", "1 1 C202405 \n", "2 5 C202409 \n", "3 12 C202406 \n", "4 2 C202416 \n", "... ... ... \n", "1663315 1 C202415 \n", "1663316 6 C202511 \n", "1663317 10 C202414 \n", "1663318 1 C202309 \n", "1663319 2 C202511 \n", "\n", "[1663320 rows x 5 columns]" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_venda_diaria" ] }, { "cell_type": "code", "execution_count": 52, "id": "1efff472", "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", "
PDVSKUDESCRICAOVendas Ciclo LançamentoCiclo
01252251944COFFEE DES COL MAN SEDUC TCH PRM 10ml11C202307
12099877557QDB BASE LIQ SUPERMAT COR 06 Q 30ml RPCK1C202405
22085874103GLAMOUR DES COL SEC BL 75ml V45C202409
3569947950ZAAD EDP 95ml V612C202406
42099350297ESTJ DEM LILY ESSENCE 4x4ml2C202416
\n", "
" ], "text/plain": [ " PDV SKU DESCRICAO \\\n", "0 12522 51944 COFFEE DES COL MAN SEDUC TCH PRM 10ml \n", "1 20998 77557 QDB BASE LIQ SUPERMAT COR 06 Q 30ml RPCK \n", "2 20858 74103 GLAMOUR DES COL SEC BL 75ml V4 \n", "3 5699 47950 ZAAD EDP 95ml V6 \n", "4 20993 50297 ESTJ DEM LILY ESSENCE 4x4ml \n", "\n", " Vendas Ciclo Lançamento Ciclo \n", "0 11 C202307 \n", "1 1 C202405 \n", "2 5 C202409 \n", "3 12 C202406 \n", "4 2 C202416 " ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_venda_diaria['SKU'] = df_venda_diaria['SKU'].astype('str')\n", "\n", "df_venda_diaria['SKU'] = df_venda_diaria['SKU'].str.replace('.','')\n", "\n", "df_venda_diaria.head()" ] }, { "cell_type": "code", "execution_count": 53, "id": "62ea79f7", "metadata": {}, "outputs": [], "source": [ "df_final['PRODUTO SIMILAR'] = df_final['PRODUTO SIMILAR'].astype('str')" ] }, { "cell_type": "code", "execution_count": 54, "id": "c5383011", "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", "
PRODUTO LANÇAMENTODESCRIÇÃO DO LANÇAMENTOPRODUTO SIMILARDESCRIÇÃO SIMILARCICLO SIMILARFOCOIAFCATEGORIAMARCA% CONSUMIDOR...Ciclo_xINICIO CICLO_xFIM CICLO_xDURAÇÃO_xmatch_ydias_ate_inicioCiclo_yINICIO CICLO_yFIM CICLO_yDURAÇÃO_y
059823NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...52004NSPA LOC RAD DES HID CPO AMEI DOUR 400mlC202315SimSimCUIDADOS COM A PELENATIVA SPA31,07 | 39,52...C2025152025-10-132025-11-0221159C2023152023-10-162023-10-2914.0
1459823NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...52004NSPA LOC RAD DES HID CPO AMEI DOUR 400mlC202315SimSimCUIDADOS COM A PELENATIVA SPA31,07 | 39,52...C2025152025-10-132025-11-0221159C2023152023-10-162023-10-2914.0
2859823NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...52004NSPA LOC RAD DES HID CPO AMEI DOUR 400mlC202315SimSimCUIDADOS COM A PELENATIVA SPA31,07 | 39,52...C2025152025-10-132025-11-0221159C2023152023-10-162023-10-2914.0
4259823NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...52004NSPA LOC RAD DES HID CPO AMEI DOUR 400mlC202315SimSimCUIDADOS COM A PELENATIVA SPA31,07 | 39,52...C2025152025-10-132025-11-0221159C2023152023-10-162023-10-2914.0
5659823NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...52004NSPA LOC RAD DES HID CPO AMEI DOUR 400mlC202315SimSimCUIDADOS COM A PELENATIVA SPA31,07 | 39,52...C2025152025-10-132025-11-0221159C2023152023-10-162023-10-2914.0
\n", "

5 rows × 79 columns

\n", "
" ], "text/plain": [ " PRODUTO LANÇAMENTO DESCRIÇÃO DO LANÇAMENTO \\\n", "0 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n", "14 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n", "28 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n", "42 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n", "56 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n", "\n", " PRODUTO SIMILAR DESCRIÇÃO SIMILAR CICLO SIMILAR \\\n", "0 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n", "14 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n", "28 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n", "42 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n", "56 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n", "\n", " FOCO IAF CATEGORIA MARCA % CONSUMIDOR ... Ciclo_x \\\n", "0 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... C202515 \n", "14 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... C202515 \n", "28 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... C202515 \n", "42 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... C202515 \n", "56 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... C202515 \n", "\n", " INICIO CICLO_x FIM CICLO_x DURAÇÃO_x match_y dias_ate_inicio Ciclo_y \\\n", "0 2025-10-13 2025-11-02 21 1 59 C202315 \n", "14 2025-10-13 2025-11-02 21 1 59 C202315 \n", "28 2025-10-13 2025-11-02 21 1 59 C202315 \n", "42 2025-10-13 2025-11-02 21 1 59 C202315 \n", "56 2025-10-13 2025-11-02 21 1 59 C202315 \n", "\n", " INICIO CICLO_y FIM CICLO_y DURAÇÃO_y \n", "0 2023-10-16 2023-10-29 14.0 \n", "14 2023-10-16 2023-10-29 14.0 \n", "28 2023-10-16 2023-10-29 14.0 \n", "42 2023-10-16 2023-10-29 14.0 \n", "56 2023-10-16 2023-10-29 14.0 \n", "\n", "[5 rows x 79 columns]" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_final.head()" ] }, { "cell_type": "code", "execution_count": 55, "id": "c5cd5f42", "metadata": {}, "outputs": [], "source": [ "df_final = pd.merge(left=df_final, right = df_venda_diaria[['PDV','SKU','Ciclo','Vendas Ciclo Lançamento']], right_on=['Ciclo','SKU','PDV'],left_on=['CICLO SIMILAR','PRODUTO SIMILAR','PDV'],how='left')\n", "\n", "df_final = df_final.drop_duplicates()" ] }, { "cell_type": "code", "execution_count": 56, "id": "4f22b782", "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", "
PRODUTO LANÇAMENTODESCRIÇÃO DO LANÇAMENTOPRODUTO SIMILARDESCRIÇÃO SIMILARCICLO SIMILARFOCOIAFCATEGORIAMARCA% CONSUMIDOR...DURAÇÃO_xmatch_ydias_ate_inicioCiclo_yINICIO CICLO_yFIM CICLO_yDURAÇÃO_ySKU_yCicloVendas Ciclo Lançamento
059823NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...52004NSPA LOC RAD DES HID CPO AMEI DOUR 400mlC202315SimSimCUIDADOS COM A PELENATIVA SPA31,07 | 39,52...21159C2023152023-10-162023-10-2914.052004C20231522
159823NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...52004NSPA LOC RAD DES HID CPO AMEI DOUR 400mlC202315SimSimCUIDADOS COM A PELENATIVA SPA31,07 | 39,52...21159C2023152023-10-162023-10-2914.052004C20231536
259823NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...52004NSPA LOC RAD DES HID CPO AMEI DOUR 400mlC202315SimSimCUIDADOS COM A PELENATIVA SPA31,07 | 39,52...21159C2023152023-10-162023-10-2914.052004C2023159
359823NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...52004NSPA LOC RAD DES HID CPO AMEI DOUR 400mlC202315SimSimCUIDADOS COM A PELENATIVA SPA31,07 | 39,52...21159C2023152023-10-162023-10-2914.052004C2023155
459823NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...52004NSPA LOC RAD DES HID CPO AMEI DOUR 400mlC202315SimSimCUIDADOS COM A PELENATIVA SPA31,07 | 39,52...21159C2023152023-10-162023-10-2914.052004C20231528
\n", "

5 rows × 82 columns

\n", "
" ], "text/plain": [ " PRODUTO LANÇAMENTO DESCRIÇÃO DO LANÇAMENTO \\\n", "0 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n", "1 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n", "2 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n", "3 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n", "4 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n", "\n", " PRODUTO SIMILAR DESCRIÇÃO SIMILAR CICLO SIMILAR \\\n", "0 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n", "1 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n", "2 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n", "3 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n", "4 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n", "\n", " FOCO IAF CATEGORIA MARCA % CONSUMIDOR ... DURAÇÃO_x \\\n", "0 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... 21 \n", "1 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... 21 \n", "2 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... 21 \n", "3 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... 21 \n", "4 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... 21 \n", "\n", " match_y dias_ate_inicio Ciclo_y INICIO CICLO_y FIM CICLO_y DURAÇÃO_y \\\n", "0 1 59 C202315 2023-10-16 2023-10-29 14.0 \n", "1 1 59 C202315 2023-10-16 2023-10-29 14.0 \n", "2 1 59 C202315 2023-10-16 2023-10-29 14.0 \n", "3 1 59 C202315 2023-10-16 2023-10-29 14.0 \n", "4 1 59 C202315 2023-10-16 2023-10-29 14.0 \n", "\n", " SKU_y Ciclo Vendas Ciclo Lançamento \n", "0 52004 C202315 22 \n", "1 52004 C202315 36 \n", "2 52004 C202315 9 \n", "3 52004 C202315 5 \n", "4 52004 C202315 28 \n", "\n", "[5 rows x 82 columns]" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_final.head()" ] }, { "cell_type": "code", "execution_count": 57, "id": "db516beb", "metadata": {}, "outputs": [], "source": [ "df_final.to_excel(r'C:\\Users\\joao.herculano\\Documents\\teste.xlsx',index=False)" ] }, { "cell_type": "code", "execution_count": 58, "id": "bde12ed6", "metadata": {}, "outputs": [], "source": [ "df_final = df_final[df_final['PRODUTO LANÇAMENTO'].notna()]\n", "df_final['Vendas Ciclo Lançamento'] = df_final['Vendas Ciclo Lançamento'].fillna(0)\n" ] }, { "cell_type": "code", "execution_count": 59, "id": "69c88d20", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "np.int64(29)" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_final['PDV'].value_counts().min()" ] }, { "cell_type": "code", "execution_count": 60, "id": "f5206f50", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['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 202509'],\n", " dtype='object')" ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_final.columns[29:46]" ] }, { "cell_type": "code", "execution_count": 61, "id": "5e33d293", "metadata": {}, "outputs": [], "source": [ "df_jacobina = pd.read_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\REGIÃO JACOBINA\\draft unificado.xlsx\")" ] }, { "cell_type": "code", "execution_count": 62, "id": "4d23ff5a", "metadata": {}, "outputs": [], "source": [ "df_jacobina = df_jacobina[['PDV', 'SKU','202408', '202409',\n", " '202410', '202411', '202412', '202413', '202414', '202415', '202416',\n", " '202417', '202501', '202502', '202503', '202504', '202505', '202506',\n", " '202507']]" ] }, { "cell_type": "code", "execution_count": 63, "id": "5adc5831", "metadata": {}, "outputs": [], "source": [ "ciclos = [\n", " '202408', '202409', '202410', '202411', '202412', '202413',\n", " '202414', '202415', '202416', '202417', '202501', '202502',\n", " '202503', '202504', '202505', '202506', '202507']\n", "\n", "df_jacobina[ciclos] = df_jacobina[ciclos].fillna(0)" ] }, { "cell_type": "code", "execution_count": 64, "id": "d3dc8c38", "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", "
PDVSKU202408202409202410202411202412202413202414202415202416202417202501202502202503202504202505202506202507
0242694901410511122113040210
1242684901410442513443024201
22426949016363111014221119122100
324268490161231222003114304210
424269481413223953241331110674102
\n", "
" ], "text/plain": [ " PDV SKU 202408 202409 202410 202411 202412 202413 202414 \\\n", "0 24269 49014 1 0 5 1 1 1 2 \n", "1 24268 49014 1 0 4 4 2 5 1 \n", "2 24269 49016 36 3 1 1 1 0 14 \n", "3 24268 49016 12 3 1 2 2 2 0 \n", "4 24269 48141 32 2 3 95 3 2 41 \n", "\n", " 202415 202416 202417 202501 202502 202503 202504 202505 202506 \\\n", "0 2 1 1 3 0 4 0 2 1 \n", "1 3 4 4 3 0 2 4 2 0 \n", "2 2 2 1 1 19 1 2 2 10 \n", "3 0 3 11 4 3 0 4 2 1 \n", "4 3 3 1 1 1 0 67 4 10 \n", "\n", " 202507 \n", "0 0 \n", "1 1 \n", "2 0 \n", "3 0 \n", "4 2 " ] }, "execution_count": 64, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_jacobina.head()" ] }, { "cell_type": "code", "execution_count": 65, "id": "4169aba0", "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", "
PRODUTO LANÇAMENTODESCRIÇÃO DO LANÇAMENTOPRODUTO SIMILARDESCRIÇÃO SIMILARCICLO SIMILARFOCOIAFCATEGORIAMARCA% CONSUMIDOR...DURAÇÃO_xmatch_ydias_ate_inicioCiclo_yINICIO CICLO_yFIM CICLO_yDURAÇÃO_ySKU_yCicloVendas Ciclo Lançamento
059823NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...52004NSPA LOC RAD DES HID CPO AMEI DOUR 400mlC202315SimSimCUIDADOS COM A PELENATIVA SPA31,07 | 39,52...21159C2023152023-10-162023-10-2914.052004C20231522
159823NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...52004NSPA LOC RAD DES HID CPO AMEI DOUR 400mlC202315SimSimCUIDADOS COM A PELENATIVA SPA31,07 | 39,52...21159C2023152023-10-162023-10-2914.052004C20231536
259823NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...52004NSPA LOC RAD DES HID CPO AMEI DOUR 400mlC202315SimSimCUIDADOS COM A PELENATIVA SPA31,07 | 39,52...21159C2023152023-10-162023-10-2914.052004C2023159
359823NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...52004NSPA LOC RAD DES HID CPO AMEI DOUR 400mlC202315SimSimCUIDADOS COM A PELENATIVA SPA31,07 | 39,52...21159C2023152023-10-162023-10-2914.052004C2023155
459823NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...52004NSPA LOC RAD DES HID CPO AMEI DOUR 400mlC202315SimSimCUIDADOS COM A PELENATIVA SPA31,07 | 39,52...21159C2023152023-10-162023-10-2914.052004C20231528
\n", "

5 rows × 82 columns

\n", "
" ], "text/plain": [ " PRODUTO LANÇAMENTO DESCRIÇÃO DO LANÇAMENTO \\\n", "0 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n", "1 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n", "2 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n", "3 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n", "4 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n", "\n", " PRODUTO SIMILAR DESCRIÇÃO SIMILAR CICLO SIMILAR \\\n", "0 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n", "1 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n", "2 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n", "3 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n", "4 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n", "\n", " FOCO IAF CATEGORIA MARCA % CONSUMIDOR ... DURAÇÃO_x \\\n", "0 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... 21 \n", "1 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... 21 \n", "2 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... 21 \n", "3 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... 21 \n", "4 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... 21 \n", "\n", " match_y dias_ate_inicio Ciclo_y INICIO CICLO_y FIM CICLO_y DURAÇÃO_y \\\n", "0 1 59 C202315 2023-10-16 2023-10-29 14.0 \n", "1 1 59 C202315 2023-10-16 2023-10-29 14.0 \n", "2 1 59 C202315 2023-10-16 2023-10-29 14.0 \n", "3 1 59 C202315 2023-10-16 2023-10-29 14.0 \n", "4 1 59 C202315 2023-10-16 2023-10-29 14.0 \n", "\n", " SKU_y Ciclo Vendas Ciclo Lançamento \n", "0 52004 C202315 22 \n", "1 52004 C202315 36 \n", "2 52004 C202315 9 \n", "3 52004 C202315 5 \n", "4 52004 C202315 28 \n", "\n", "[5 rows x 82 columns]" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_final['PRODUTO SIMILAR'] = df_final['PRODUTO SIMILAR'].astype('Int64')\n", "\n", "df_final.head()" ] }, { "cell_type": "code", "execution_count": 66, "id": "1c4f5d9d", "metadata": {}, "outputs": [], "source": [ "df_final = pd.merge(left=df_final,right=df_jacobina,left_on=['PRODUTO SIMILAR','PDV'],right_on=['SKU','PDV'],how='left')" ] }, { "cell_type": "code", "execution_count": 67, "id": "2529e624", "metadata": {}, "outputs": [], "source": [ "# Gera pares de colunas: coluna estática ↔ coluna de histórico\n", "pares_validos = [\n", " (ciclo, f'Histórico de Vendas do Ciclo {ciclo}')\n", " for ciclo in ciclos\n", " if ciclo in df_final.columns and f'Histórico de Vendas do Ciclo {ciclo}' in df_final.columns\n", "]\n", "\n", "# Separa os nomes das colunas\n", "colunas_estaticas = [c[0] for c in pares_validos]\n", "colunas_historico = [c[1] for c in pares_validos]\n", "\n", "# Aplica a regra: se valor na coluna estática for maior, sobrescreve no histórico\n", "for col_estatica, col_hist in zip(colunas_estaticas, colunas_historico):\n", " df_final[col_hist] = df_final[col_estatica].where(\n", " df_final[col_estatica] > df_final[col_hist],\n", " df_final[col_hist]\n", " )\n" ] }, { "cell_type": "code", "execution_count": 68, "id": "fc094fae", "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", "
PRODUTO LANÇAMENTODESCRIÇÃO DO LANÇAMENTOPRODUTO SIMILARDESCRIÇÃO SIMILARCICLO SIMILARFOCOIAFCATEGORIAMARCA% CONSUMIDOR...202415202416202417202501202502202503202504202505202506202507
059823NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...52004NSPA LOC RAD DES HID CPO AMEI DOUR 400mlC202315SimSimCUIDADOS COM A PELENATIVA SPA31,07 | 39,52...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
159823NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...52004NSPA LOC RAD DES HID CPO AMEI DOUR 400mlC202315SimSimCUIDADOS COM A PELENATIVA SPA31,07 | 39,52...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
259823NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...52004NSPA LOC RAD DES HID CPO AMEI DOUR 400mlC202315SimSimCUIDADOS COM A PELENATIVA SPA31,07 | 39,52...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
359823NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...52004NSPA LOC RAD DES HID CPO AMEI DOUR 400mlC202315SimSimCUIDADOS COM A PELENATIVA SPA31,07 | 39,52...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
459823NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...52004NSPA LOC RAD DES HID CPO AMEI DOUR 400mlC202315SimSimCUIDADOS COM A PELENATIVA SPA31,07 | 39,52...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
..................................................................
228687771MAKE B BLUSH COMP BERRY MINI PRM 1,5g8777100NãoNãoSUPORTE À VENDAMAKE B.-...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
228787771MAKE B BLUSH COMP BERRY MINI PRM 1,5g8777100NãoNãoSUPORTE À VENDAMAKE B.-...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
228887771MAKE B BLUSH COMP BERRY MINI PRM 1,5g8777100NãoNãoSUPORTE À VENDAMAKE B.-...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
228987771MAKE B BLUSH COMP BERRY MINI PRM 1,5g8777100NãoNãoSUPORTE À VENDAMAKE B.-...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
229087771MAKE B BLUSH COMP BERRY MINI PRM 1,5g8777100NãoNãoSUPORTE À VENDAMAKE B.-...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
\n", "

2291 rows × 100 columns

\n", "
" ], "text/plain": [ " PRODUTO LANÇAMENTO DESCRIÇÃO DO LANÇAMENTO \\\n", "0 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n", "1 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n", "2 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n", "3 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n", "4 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n", "... ... ... \n", "2286 87771 MAKE B BLUSH COMP BERRY MINI PRM 1,5g \n", "2287 87771 MAKE B BLUSH COMP BERRY MINI PRM 1,5g \n", "2288 87771 MAKE B BLUSH COMP BERRY MINI PRM 1,5g \n", "2289 87771 MAKE B BLUSH COMP BERRY MINI PRM 1,5g \n", "2290 87771 MAKE B BLUSH COMP BERRY MINI PRM 1,5g \n", "\n", " PRODUTO SIMILAR DESCRIÇÃO SIMILAR CICLO SIMILAR \\\n", "0 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n", "1 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n", "2 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n", "3 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n", "4 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n", "... ... ... ... \n", "2286 87771 0 0 \n", "2287 87771 0 0 \n", "2288 87771 0 0 \n", "2289 87771 0 0 \n", "2290 87771 0 0 \n", "\n", " FOCO IAF CATEGORIA MARCA % CONSUMIDOR ... 202415 \\\n", "0 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... NaN \n", "1 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... NaN \n", "2 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... NaN \n", "3 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... NaN \n", "4 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... NaN \n", "... ... ... ... ... ... ... ... \n", "2286 Não Não SUPORTE À VENDA MAKE B. - ... NaN \n", "2287 Não Não SUPORTE À VENDA MAKE B. - ... NaN \n", "2288 Não Não SUPORTE À VENDA MAKE B. - ... NaN \n", "2289 Não Não SUPORTE À VENDA MAKE B. - ... NaN \n", "2290 Não Não SUPORTE À VENDA MAKE B. - ... NaN \n", "\n", " 202416 202417 202501 202502 202503 202504 202505 202506 202507 \n", "0 NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "1 NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "2 NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "3 NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "4 NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "... ... ... ... ... ... ... ... ... ... \n", "2286 NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "2287 NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "2288 NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "2289 NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "2290 NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "\n", "[2291 rows x 100 columns]" ] }, "execution_count": 68, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_final" ] }, { "cell_type": "code", "execution_count": 69, "id": "dcff1fcb", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\joao.herculano\\AppData\\Local\\Temp\\ipykernel_101180\\260461722.py:1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", " df_final = df_final.fillna(0)\n" ] } ], "source": [ "df_final = df_final.fillna(0)" ] }, { "cell_type": "code", "execution_count": 70, "id": "0a1bb832", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "np.float64(0.2267)" ] }, "execution_count": 70, "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[29:46]\n", "\n", "# Passo 1: Soma todas as linhas (itens) por mês → resultado: total por mês\n", "soma_mensal = df_final[colunas_mensais].sum()\n", "\n", "# Passo 2: Calcula a variação percentual de um mês para o outro\n", "variacao_mensal = soma_mensal.pct_change()\n", "variacao_mensal = variacao_mensal.dropna()\n", "\n", "variacao_mensal = variacao_mensal[np.isfinite(variacao_mensal)]\n", "\n", "# Passo 3: Calcula a média da variação (ignorando o primeiro NaN)\n", "media_variacao = variacao_mensal[1:].mean()\n", "\n", "# Calcula média e desvio padrão\n", "media = variacao_mensal.mean()\n", "desvio = variacao_mensal.std()\n", "\n", "# Define limite (ex: 2 desvios padrão)\n", "limite_superior = media + 2 * desvio\n", "limite_inferior = media - 2 * desvio\n", "\n", "# Filtra dados dentro do limite\n", "filtro = variacao_mensal.between(limite_inferior, limite_superior)\n", "df_filtrado = variacao_mensal[filtro]\n", "CRESCIMENTO = round(df_filtrado.mean(),4)\n", "\n", "CRESCIMENTO = 0.2 if CRESCIMENTO < 0.2 else CRESCIMENTO\n", "\n", "df_final['CRESCIMENTO_GERAL'] = CRESCIMENTO\n", "\n", "CRESCIMENTO\n" ] }, { "cell_type": "code", "execution_count": 71, "id": "a9647c32", "metadata": {}, "outputs": [], "source": [ "df_final = df_final.drop(columns='Ciclo_y')\n", "\n", "df_final = df_final.rename(columns={'Ciclo_x': 'Ciclo',\t'INICIO CICLO_x': 'INICIO CICLO',\t'FIM CICLO_x':'FIM CICLO' ,'DURAÇÃO_x':'DURAÇÃO',\n", " \t'INICIO CICLO_y': 'INICIO CICLO SIMILAR' ,\t'FIM CICLO_y': 'FIM CICLO SIMILAR','DURAÇÃO_y':'DURAÇÃO CICLO SIMILAR'})" ] }, { "cell_type": "code", "execution_count": 72, "id": "b107e519", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['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 202509',\n", " 'Histórico de Vendas do Ciclo Atual'],\n", " dtype='object')" ] }, "execution_count": 72, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_final.columns[40:47]" ] }, { "cell_type": "code", "execution_count": 73, "id": "8290853c", "metadata": {}, "outputs": [], "source": [ "VENDA_SIMILAR_6_MESES= df_final.columns[40:47]\n", "\n", "df_final['Pico Vendas Similar Ultimos 6 ciclos'] = df_final[VENDA_SIMILAR_6_MESES].max(axis=1)\n", "\n", "df_final['Pico Vendas Similar Ultimos 6 ciclos'] = df_final['Pico Vendas Similar Ultimos 6 ciclos'].fillna(0)\n", "\n", "df_final['MEDIANA DO HISTÓRICO'] = df_final[colunas_mensais].median(axis=1, skipna=True)\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 74, "id": "d8b30560", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 2.0\n", "1 2.0\n", "2 0.0\n", "3 0.0\n", "4 1.0\n", " ... \n", "2286 0.0\n", "2287 0.0\n", "2288 0.0\n", "2289 0.0\n", "2290 0.0\n", "Length: 2291, dtype: float64" ] }, "execution_count": 74, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_final[colunas_mensais].median(axis=1, skipna=True)\n" ] }, { "cell_type": "code", "execution_count": 75, "id": "07f043f2", "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", "
CANALUFmed_por_canal
0CDAL618.0
1HIBAL50.0
2HIBBA96.0
3HIBBA30.0
4HIBSE42.0
5LJAL87.0
6LJBA25.0
7LJBA319.0
8LJSE20.0
9VDAL202.0
10VDBA205.0
11VDBA347.0
12VDSE164.0
\n", "
" ], "text/plain": [ " CANAL UF med_por_canal\n", "0 CD AL 618.0\n", "1 HIB AL 50.0\n", "2 HIB BA 96.0\n", "3 HIB BA3 0.0\n", "4 HIB SE 42.0\n", "5 LJ AL 87.0\n", "6 LJ BA 25.0\n", "7 LJ BA3 19.0\n", "8 LJ SE 20.0\n", "9 VD AL 202.0\n", "10 VD BA 205.0\n", "11 VD BA3 47.0\n", "12 VD SE 164.0" ] }, "execution_count": 75, "metadata": {}, "output_type": "execute_result" } ], "source": [ "medi = df_final.groupby(['CANAL','UF'])['MEDIANA DO HISTÓRICO'].max().reset_index()\n", "medi = medi.rename(columns={'MEDIANA DO HISTÓRICO':'med_por_canal'})\n", "medi" ] }, { "cell_type": "code", "execution_count": 76, "id": "94abddce", "metadata": {}, "outputs": [], "source": [ "#df_final = pd.merge(left=df_final, right=medi,on=['CANAL','UF'],how='inner')\n" ] }, { "cell_type": "code", "execution_count": 77, "id": "c4fbc613", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 LANÇAMENTO\n", "1 LANÇAMENTO\n", "2 LANÇAMENTO\n", "3 LANÇAMENTO\n", "4 LANÇAMENTO\n", " ... \n", "2286 PROMOÇÃO\n", "2287 PROMOÇÃO\n", "2288 PROMOÇÃO\n", "2289 PROMOÇÃO\n", "2290 PROMOÇÃO\n", "Name: TIPO DE PRODUTO, Length: 2291, dtype: object" ] }, "execution_count": 77, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_final['TIPO DE PRODUTO']" ] }, { "cell_type": "code", "execution_count": 78, "id": "df26720c", "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", "
PDVSKUDESCRICAOVendas Ciclo LançamentoCiclo
01252251944COFFEE DES COL MAN SEDUC TCH PRM 10ml11C202307
12099877557QDB BASE LIQ SUPERMAT COR 06 Q 30ml RPCK1C202405
22085874103GLAMOUR DES COL SEC BL 75ml V45C202409
3569947950ZAAD EDP 95ml V612C202406
42099350297ESTJ DEM LILY ESSENCE 4x4ml2C202416
\n", "
" ], "text/plain": [ " PDV SKU DESCRICAO \\\n", "0 12522 51944 COFFEE DES COL MAN SEDUC TCH PRM 10ml \n", "1 20998 77557 QDB BASE LIQ SUPERMAT COR 06 Q 30ml RPCK \n", "2 20858 74103 GLAMOUR DES COL SEC BL 75ml V4 \n", "3 5699 47950 ZAAD EDP 95ml V6 \n", "4 20993 50297 ESTJ DEM LILY ESSENCE 4x4ml \n", "\n", " Vendas Ciclo Lançamento Ciclo \n", "0 11 C202307 \n", "1 1 C202405 \n", "2 5 C202409 \n", "3 12 C202406 \n", "4 2 C202416 " ] }, "execution_count": 78, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_venda_diaria.head()" ] }, { "cell_type": "code", "execution_count": 79, "id": "ef979be5", "metadata": {}, "outputs": [], "source": [ "df_dourado = pd.read_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\DADOS DOURADO\\VENDA\\compilado de vendas.xlsx\")\n", "\n", "df_dourado['Data de venda'] = pd.to_datetime(df_dourado['Data de venda'], dayfirst=True)\n", "\n", "df_dourado['de para pdv'] = df_dourado['de para pdv'].astype(str)\n", "\n", "df_dourado['de para pdv'] = df_dourado['de para pdv'].str.replace(r'\\.0$', '', regex=True)\n", "\n", "# 'Dia' já está em formato datetime, então renomeamos para 'Data' diretamente\n", "# ou apenas usamos 'Dia' como referência de data\n", "\n", "# Ordena o DataFrame para garantir que a cumulativa funcione corretamente\n", "df_venda_diaria = df_venda_diaria.sort_values(by=['PDV', 'SKU', 'Ciclo'])\n", "\n", "# Calcula a quantidade acumulada até o dia para cada grupo\n", "df_dourado['Quantidade Acumulada dourado'] = (\n", " df_dourado\n", " .groupby(['de para pdv', 'sku'])['Quantidade Vendida']\n", " .cumsum()\n", ") # acumulado por grupo até a data da linha\n", "\n", "df_dourado = pd.merge(left=df_dourado,right=calendario[['Date','Ciclo']],left_on='Data de venda',right_on='Date',how='inner')\n", "\n", "\n", "\n", "df_dourado_agrupado = df_dourado.groupby(['de para pdv','sku','Ciclo'])['Quantidade Acumulada dourado'].max().reset_index()\n", "\n", "df_dourado_agrupado = df_dourado_agrupado.rename(columns={'Ciclo':'Ciclo dourado'})\n", "\n" ] }, { "cell_type": "code", "execution_count": 80, "id": "41eb7ebf", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 12522\n", "1 12817\n", "2 12818\n", "3 12820\n", "4 12823\n", "Name: PDV, dtype: object" ] }, "execution_count": 80, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_final['PDV'] = df_final['PDV'].astype(str)\n", "df_final['PDV'].head()" ] }, { "cell_type": "code", "execution_count": 81, "id": "6dbe67bb", "metadata": {}, "outputs": [], "source": [ "df_final = pd.merge(left=df_final, right = df_dourado_agrupado, right_on=['Ciclo dourado','sku','de para pdv'],left_on=['CICLO SIMILAR','PRODUTO SIMILAR','PDV'],how='left')\n", "\n", "df_final['Quantidade Acumulada dourado'] = df_final['Quantidade Acumulada dourado'].fillna(0)\n", "\n", "\n", "df_final['Vendas Ciclo Lançamento'] = np.where(df_final['Quantidade Acumulada dourado'] > 0, df_final['Quantidade Acumulada dourado'], df_final['Vendas Ciclo Lançamento'])\n", "\n", "df_final = df_final.drop(columns='Quantidade Acumulada dourado')\n", "\n", "\n", "df_final = df_final.drop(columns='Ciclo dourado')" ] }, { "cell_type": "code", "execution_count": 82, "id": "7986b8fa", "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", "
CP VIVA BEMProtheusPDVDEPARA.PracticoCanalEndereçoCNPJCNPJ Locação
0355970101.023713.0MATRIZ - LJRua Zeferino Correia, nº 17, Centro, CEP 45.00...14.378.160/0001-8314.378.160/0001-83
1729270103.023712.0LOJAAl. Rio Branco, nº 373, Centro, Cândido Sales ...14.378.160/0006-9814.378.160/0006-98
2870870102.023711.0VDAl. Lima Guerra, nº 04, Centro, Vitória da Con...14.378.160/0005-0714.378.160/0001-83
38931NaN23710.0NaNAvenida Rosa Cruz, nº 80, Hiper B Preço Loja B...14.378.160/0008-5014.378.160/0008-50
41119170108.023709.0LOJAAv. Juracy Magalhães, nº 3340, Shopping Conqui...14.378.160/0009-3014.378.160/0001-83
\n", "
" ], "text/plain": [ " CP VIVA BEM Protheus PDVDEPARA.Practico Canal \\\n", "0 3559 70101.0 23713.0 MATRIZ - LJ \n", "1 7292 70103.0 23712.0 LOJA \n", "2 8708 70102.0 23711.0 VD \n", "3 8931 NaN 23710.0 NaN \n", "4 11191 70108.0 23709.0 LOJA \n", "\n", " Endereço CNPJ \\\n", "0 Rua Zeferino Correia, nº 17, Centro, CEP 45.00... 14.378.160/0001-83 \n", "1 Al. Rio Branco, nº 373, Centro, Cândido Sales ... 14.378.160/0006-98 \n", "2 Al. Lima Guerra, nº 04, Centro, Vitória da Con... 14.378.160/0005-07 \n", "3 Avenida Rosa Cruz, nº 80, Hiper B Preço Loja B... 14.378.160/0008-50 \n", "4 Av. Juracy Magalhães, nº 3340, Shopping Conqui... 14.378.160/0009-30 \n", "\n", " CNPJ Locação \n", "0 14.378.160/0001-83 \n", "1 14.378.160/0006-98 \n", "2 14.378.160/0001-83 \n", "3 14.378.160/0008-50 \n", "4 14.378.160/0001-83 " ] }, "execution_count": 82, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_depara_vdc = pd.read_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\Vitoria da Conquista\\HISTORICO VENDAS VITORIA DA CONQUISTA\\Filiais - Vitoria da Conquista 4.xlsx\")\n", "\n", "df_depara_vdc.head()" ] }, { "cell_type": "code", "execution_count": 83, "id": "09efe938", "metadata": {}, "outputs": [], "source": [ "df_vdc = pd.read_parquet(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\Vitoria da Conquista\\HISTORICO VENDAS VITORIA DA CONQUISTA\\VENDAS VITORIA DA CONQUISTA\\concatenado.parquet\")\n", "\n", "df_vdc['PDV'] = df_vdc['Quebra'].str.split(\" -\").str[0]\n", "\n", "df_vdc['PDV'] = df_vdc['PDV'].astype('int64')\n", "\n", "df_vdc = df_vdc.rename(columns={'Quebra2':'DATA VENDA'})\n", "\n", "df_vdc['DATA VENDA'] = pd.to_datetime(df_vdc['DATA VENDA'], format='%d/%m/%Y')" ] }, { "cell_type": "code", "execution_count": 84, "id": "330154b2", "metadata": {}, "outputs": [], "source": [ "df_vdc = pd.merge(df_vdc,df_depara_vdc[['CP VIVA BEM','PDVDEPARA.Practico']],left_on='PDV',right_on='CP VIVA BEM',how='inner')\n", "\n", "df_vdc['Quantidade'] = df_vdc['Quantidade'].str.replace(r',000$','',regex=True)\n", "\n", "df_vdc['Quantidade'] = df_vdc['Quantidade'].astype('Int64') " ] }, { "cell_type": "code", "execution_count": 85, "id": "09cc2f82", "metadata": {}, "outputs": [], "source": [ "\n", "\n", "\n", "\n", "# 'Dia' já está em formato datetime, então renomeamos para 'Data' diretamente\n", "# ou apenas usamos 'Dia' como referência de data\n", "\n", "# Ordena o DataFrame para garantir que a cumulativa funcione corretamente\n", "#df_venda_diaria = df_venda_diaria.sort_values(by=['PDV', 'SKU', 'Ciclo'])\n", "\n", "# Calcula a quantidade acumulada até o dia para cada grupo\n", "df_vdc['Quantidade Acumulada vdc'] = (\n", " df_vdc\n", " .groupby(['PDVDEPARA.Practico', 'Código'])['Quantidade']\n", " .cumsum()\n", ") # acumulado por grupo até a data da linha" ] }, { "cell_type": "code", "execution_count": 86, "id": "5a827c08", "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", "
PDVDEPARA.PracticoCódigoCiclo vdcQuantidade Acumulada vdc
0237011004C202203139.0
1237011004C202204161.0
2237011004C202205162.0
3237011004C2022069.0
4237011004C20220715.0
\n", "
" ], "text/plain": [ " PDVDEPARA.Practico Código Ciclo vdc Quantidade Acumulada vdc\n", "0 23701 1004 C202203 139.0\n", "1 23701 1004 C202204 161.0\n", "2 23701 1004 C202205 162.0\n", "3 23701 1004 C202206 9.0\n", "4 23701 1004 C202207 15.0" ] }, "execution_count": 86, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_vdc = pd.merge(left=df_vdc,right=calendario[['Date','Ciclo']],left_on='DATA VENDA',right_on='Date',how='inner')\n", "\n", "df_vdc_agrupado = df_vdc.groupby(['PDVDEPARA.Practico',\t'Código','Ciclo'])['Quantidade Acumulada vdc'].max().reset_index()\n", "\n", "df_vdc_agrupado = df_vdc_agrupado.rename(columns={'Ciclo':'Ciclo vdc'})\n", "\n", "\n", "df_vdc_agrupado['PDVDEPARA.Practico'] = df_vdc_agrupado['PDVDEPARA.Practico'].astype(str).str.replace(r'\\.0$', '', regex=True)\n", "df_vdc_agrupado.head()\n", "\n" ] }, { "cell_type": "code", "execution_count": 87, "id": "4933b6d2", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\joao.herculano\\AppData\\Local\\Temp\\ipykernel_101180\\3455958411.py:3: FutureWarning: DataFrame.replace without 'value' and with non-dict-like 'to_replace' is deprecated and will raise in a future version. Explicitly specify the new values instead.\n", " df_vdc_agrupado = df_vdc_agrupado.replace()\n" ] } ], "source": [ "df_vdc_agrupado = df_vdc_agrupado.astype(str)\n", "\n", "df_vdc_agrupado = df_vdc_agrupado.replace()" ] }, { "cell_type": "code", "execution_count": 88, "id": "8d5f2c33", "metadata": {}, "outputs": [], "source": [ "#df_vdc.to_excel(r\"C:\\Users\\joao.herculano\\Documents\\df_vdc.xlsx\",index=False)" ] }, { "cell_type": "code", "execution_count": 89, "id": "63fea2ea", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 23701\n", "1 23701\n", "2 23701\n", "3 23701\n", "4 23701\n", "Name: PDVDEPARA.Practico, dtype: object" ] }, "execution_count": 89, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_vdc_agrupado['PDVDEPARA.Practico'] = df_vdc_agrupado['PDVDEPARA.Practico'].astype(str)\n", "\n", "df_vdc_agrupado['PDVDEPARA.Practico'].head()" ] }, { "cell_type": "code", "execution_count": 90, "id": "84b5917c", "metadata": {}, "outputs": [], "source": [ "df_final['PRODUTO SIMILAR'] = df_final['PRODUTO SIMILAR'].astype('Int64')" ] }, { "cell_type": "code", "execution_count": 91, "id": "ca911bd1", "metadata": {}, "outputs": [], "source": [ "df_vdc_agrupado['Código'] = df_vdc_agrupado['Código'].astype('Int64')" ] }, { "cell_type": "code", "execution_count": 92, "id": "8ec14143", "metadata": {}, "outputs": [], "source": [ "df_final = pd.merge(left=df_final, right = df_vdc_agrupado, right_on=['Ciclo vdc','Código','PDVDEPARA.Practico'],left_on=['CICLO SIMILAR','PRODUTO SIMILAR','PDV'],how='left')\n", "\n", "df_final['Quantidade Acumulada vdc'] = pd.to_numeric(\n", " df_final['Quantidade Acumulada vdc'],\n", " errors='coerce' # valores inválidos viram NaN\n", ").fillna(0).astype('Int64')\n", "\n", "\n", "df_final['Vendas Ciclo Lançamento'] = np.where(df_final['Quantidade Acumulada vdc'] > 0, df_final['Quantidade Acumulada vdc'], df_final['Vendas Ciclo Lançamento'])\n", "\n", "df_final = df_final.drop(columns='Quantidade Acumulada vdc')\n", "\n", "\n", "df_final = df_final.drop(columns='Ciclo vdc')\n", "\n" ] }, { "cell_type": "code", "execution_count": 93, "id": "1a625e69", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(2291, 108)" ] }, "execution_count": 93, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\n", "# Cálculo do crescimento\n", "crescimento_final = df_final['CRESCIMENTO_GERAL'] + df_final['CRESCIMENTO']\n", "crescimento_final = crescimento_final.clip(lower=0.2, upper=0.8) # limita entre 0 e 0.8\n", "df_final['CRESCIMENTO_FINAL'] = crescimento_final\n", "\n", "df_final['CRESCIMENTO_FINAL'] = np.where(df_final['CRESCIMENTO_FINAL'].isna(),df_final['CRESCIMENTO_GERAL'],df_final['CRESCIMENTO_FINAL'])\n", "\n", "df_final['CRESCIMENTO_FINAL'] = df_final['CRESCIMENTO_FINAL'].fillna(0)\n", "\n", "df_final['MEDIANA DO HISTÓRICO'] = df_final['MEDIANA DO HISTÓRICO'].fillna(0)\n", "\n", "# Corrige mediana do histórico onde for zero\n", "df_final['MEDIANA DO HISTÓRICO'] = np.where(\n", " df_final['MEDIANA DO HISTÓRICO'] == 0,\n", " 0,\n", " df_final['MEDIANA DO HISTÓRICO']\n", ")\n", "\n", "df_final['MEDIANA DO HISTÓRICO'] = df_final['MEDIANA DO HISTÓRICO'].fillna(0)\n", "\n", "\n", "\n", "# Cálculo do PV GINSENG\n", "pv_crescimento = (df_final['CRESCIMENTO_FINAL']+1) * df_final['Vendas Ciclo Lançamento']\n", "pv_mediana = (df_final['CRESCIMENTO_FINAL'] + 1) * df_final['MEDIANA DO HISTÓRICO']\n", "\n", "df_final['PV GINSENG'] = np.where(\n", " pv_crescimento < df_final['MEDIANA DO HISTÓRICO'],\n", " pv_mediana.round(0),\n", " pv_crescimento.round(0)\n", ")\n", "\n", "# Se PV GINSENG for NA, substitui pela média por canal\n", "df_final['PV GINSENG'] = df_final['PV GINSENG'].fillna(0)\n", "\n", "df_final['PV GINSENG'] = df_final['PV GINSENG'].round(0).astype(int)\n", "\n", "df_final.shape\n" ] }, { "cell_type": "code", "execution_count": 94, "id": "cfdae71d", "metadata": {}, "outputs": [], "source": [ "df_final.to_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\BD_LANÇAMENTOS\\BOT\\BOT - C12\\LANÇAMENTOS\\validação.xlsx\",index=False)" ] }, { "cell_type": "code", "execution_count": 95, "id": "ad10c069", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Index(['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", " dtype='object')\n" ] } ], "source": [ "print(df_final.columns[30:43])\n", "\n", "df_final.drop(columns=df_final.columns[30:43],inplace=True)" ] }, { "cell_type": "code", "execution_count": 96, "id": "3b7f3a82", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['Histórico de Vendas do Ciclo 202410',\n", " 'Histórico de Vendas do Ciclo 202507',\n", " 'Histórico de Vendas do Ciclo 202508',\n", " 'Histórico de Vendas do Ciclo 202509',\n", " 'Histórico de Vendas do Ciclo Atual'],\n", " dtype='object')" ] }, "execution_count": 96, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_final.columns[29:34]" ] }, { "cell_type": "code", "execution_count": 97, "id": "15b7149f", "metadata": {}, "outputs": [], "source": [ "df_final = df_final.rename(columns={df_final.columns[30]: \"C-4\", df_final.columns[31]: \"C-3\",df_final.columns[32]: \"C-2\",df_final.columns[29]: \"C-1\",df_final.columns[33]:'VENDAS CICLO ATUAL'})\n" ] }, { "cell_type": "code", "execution_count": 98, "id": "9333bc77", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['PRODUTO LANÇAMENTO', 'DESCRIÇÃO DO LANÇAMENTO', 'PRODUTO SIMILAR',\n", " 'DESCRIÇÃO SIMILAR', 'CICLO SIMILAR', 'FOCO', 'IAF', 'CATEGORIA',\n", " 'MARCA', '% CONSUMIDOR', 'MECANICA CONSUMIDOR', '% REVENDEDOR',\n", " 'MECANICA REVENDEDOR', 'TIPO DE PRODUTO', 'MATCH', 'PDV', 'CANAL',\n", " 'DESCRIÇÃO PDV', 'PDV DESC', 'UF', 'ANALISTA', 'SUPERVISOR', 'STATUS',\n", " 'CLASSE', 'SKU_X', 'DESCRIÇÃO', 'SUBCATEGORIA', 'LANÇAMENTO',\n", " 'DESATIVAÇÃO', 'C-1', 'C-4', 'C-3', 'C-2', 'VENDAS CICLO ATUAL',\n", " 'DIAS SEM VENDA', 'PROJEÇÃO PRÓXIMO CICLO',\n", " 'PROJEÇÃO PRÓXIMO CICLO + 1', 'PROMOÇÃO PRÓXIMO CICLO',\n", " 'PROMOÇÃO PRÓXIMO CICLO + 1', 'ESTOQUE ATUAL', 'ESTOQUE EM TRANSITO',\n", " 'PEDIDO PENDENTE', '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', 'MATCH_X', 'CRESCIMENTO', 'CICLO', 'INICIO CICLO',\n", " 'FIM CICLO', 'DURAÇÃO', 'MATCH_Y', 'DIAS_ATE_INICIO',\n", " 'INICIO CICLO SIMILAR', 'FIM CICLO SIMILAR', 'DURAÇÃO CICLO SIMILAR',\n", " 'SKU_Y', 'CICLO', 'VENDAS CICLO LANÇAMENTO', 'SKU', '202408', '202409',\n", " '202410', '202411', '202412', '202413', '202414', '202415', '202416',\n", " '202417', '202501', '202502', '202503', '202504', '202505', '202506',\n", " '202507', 'CRESCIMENTO_GERAL', 'PICO VENDAS SIMILAR ULTIMOS 6 CICLOS',\n", " 'MEDIANA DO HISTÓRICO', 'DE PARA PDV', 'SKU', 'PDVDEPARA.PRACTICO',\n", " 'CÓDIGO', 'CRESCIMENTO_FINAL', 'PV GINSENG'],\n", " dtype='object')" ] }, "execution_count": 98, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_final.columns = df_final.columns.str.upper()\n", "\n", "df_final.drop(columns=df_final.filter(regex='HISTÓRICO DE VENDAS DO CICLO').columns, inplace=True)\n", "\n", "df_final.columns" ] }, { "cell_type": "code", "execution_count": 99, "id": "dceebd16", "metadata": {}, "outputs": [], "source": [ "df_final = df_final.rename(columns={'MARCA_X':'MARCA'})" ] }, { "cell_type": "code", "execution_count": 100, "id": "62ce5c62", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(2291, 94)" ] }, "execution_count": 100, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_final.shape" ] }, { "cell_type": "code", "execution_count": 101, "id": "cecca116", "metadata": {}, "outputs": [], "source": [ "df_final[['C-4', 'C-3', 'C-2', 'C-1', 'VENDAS CICLO ATUAL']] = df_final[['C-4', 'C-3', 'C-2', 'C-1', 'VENDAS CICLO ATUAL']].fillna(0)" ] }, { "cell_type": "code", "execution_count": 102, "id": "8ad318b0", "metadata": {}, "outputs": [], "source": [ "df_final = df_final.loc[:, ~df_final.columns.duplicated()]\n", "\n", "colunas_desejadas = [\n", " 'SUPERVISOR',\n", " 'ANALISTA',\n", " 'CANAL',\n", " 'UF',\n", " 'PDV',\n", " 'DESCRIÇÃO PDV',\n", " 'PRODUTO LANÇAMENTO',\n", " 'DESCRIÇÃO DO LANÇAMENTO',\n", " 'MARCA',\n", " 'CATEGORIA',\n", " '% CONSUMIDOR',\n", " 'MECANICA CONSUMIDOR',\n", " '% REVENDEDOR',\n", " 'MECANICA REVENDEDOR',\n", " 'TIPO DE PRODUTO',\n", " 'IAF',\n", " 'FOCO',\n", " 'PRODUTO SIMILAR',\n", " 'DESCRIÇÃO SIMILAR',\n", " 'CICLO SIMILAR',\n", " 'VENDAS CICLO LANÇAMENTO',\n", " 'C-4',\n", " 'C-3',\n", " 'C-2',\n", " 'C-1',\n", " 'VENDAS CICLO ATUAL',\n", " 'PICO VENDAS SIMILAR ULTIMOS 6 CICLOS',\n", " 'PV GINSENG'\n", "]\n", "\n", "df_final = df_final.reindex(columns=colunas_desejadas)\n", "\n", "colunas_filtradas = [col for col in colunas_desejadas if col in df_final.columns]\n", "df_final = df_final[colunas_filtradas]\n" ] }, { "cell_type": "code", "execution_count": 103, "id": "25cbff26", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\"df_final = df_final.reindex(columns=[\\n 'SUPERVISOR',\\n 'ANALISTA',\\n 'CANAL',\\n 'UF',\\n 'PDV',\\n 'DESCRIÇÃO PDV',\\n 'PRODUTO LANÇAMENTO',\\n 'DESCRIÇÃO DO LANÇAMENTO',\\n 'MARCA',\\n 'CATEGORIA',\\n 'MECANICA CONSUMIDOR',\\n '% CONSUMIDOR',\\n 'MECANICA REVENDEDOR',\\n '% REVENDEDOR',\\n 'TIPO DE PRODUTO',\\n 'IAF',\\n 'FOCO',\\n 'PRODUTO SIMILAR',\\n 'DESCRIÇÃO SIMILAR',\\n 'CICLO SIMILAR',\\n 'VENDAS CICLO LANÇAMENTO',\\n 'C-4',\\n 'C-3',\\n 'C-2',\\n 'C-1',\\n 'VENDAS CICLO ATUAL',\\n 'PICO VENDAS SIMILAR ULTIMOS 6 CICLOS',\\n 'PV GINSENG'])\\n\"" ] }, "execution_count": 103, "metadata": {}, "output_type": "execute_result" } ], "source": [ "'''df_final = df_final.reindex(columns=[\n", " 'SUPERVISOR',\n", " 'ANALISTA',\n", " 'CANAL',\n", " 'UF',\n", " 'PDV',\n", " 'DESCRIÇÃO PDV',\n", " 'PRODUTO LANÇAMENTO',\n", " 'DESCRIÇÃO DO LANÇAMENTO',\n", " 'MARCA',\n", " 'CATEGORIA',\n", " 'MECANICA CONSUMIDOR',\n", " '% CONSUMIDOR',\n", " 'MECANICA REVENDEDOR',\n", " '% REVENDEDOR',\n", " 'TIPO DE PRODUTO',\n", " 'IAF',\n", " 'FOCO',\n", " 'PRODUTO SIMILAR',\n", " 'DESCRIÇÃO SIMILAR',\n", " 'CICLO SIMILAR',\n", " 'VENDAS CICLO LANÇAMENTO',\n", " 'C-4',\n", " 'C-3',\n", " 'C-2',\n", " 'C-1',\n", " 'VENDAS CICLO ATUAL',\n", " 'PICO VENDAS SIMILAR ULTIMOS 6 CICLOS',\n", " 'PV GINSENG'])\n", "'''" ] }, { "cell_type": "code", "execution_count": 104, "id": "a3e80cb4", "metadata": {}, "outputs": [], "source": [ "df_final['SUGESTÃO METASELLIN'] = ''\n", "df_final['SUGESTÃO ABASTECIMENTO'] = ''\n", "df_final['SUGESTÃO COMERCIAL'] = ''\n" ] }, { "cell_type": "code", "execution_count": 105, "id": "cc9c6ee6", "metadata": {}, "outputs": [], "source": [ "df_pdv_origi['PDV'] = df_pdv_origi['PDV'].astype(str)\n", "\n", "df_pdv_origi['PDV'].head()\n", "\n", "df_pdv_origi = df_pdv_origi.rename(columns={'UF':'UF_CERTO'})" ] }, { "cell_type": "code", "execution_count": 106, "id": "df9f0130", "metadata": {}, "outputs": [], "source": [ "df_final= pd.merge(df_final,df_pdv_origi[['UF_CERTO','PDV']],on='PDV',how='inner')" ] }, { "cell_type": "code", "execution_count": 107, "id": "7778d82f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['SUPERVISOR', 'ANALISTA', 'CANAL', 'UF', 'PDV', 'DESCRIÇÃO PDV',\n", " 'PRODUTO LANÇAMENTO', 'DESCRIÇÃO DO LANÇAMENTO', 'MARCA', 'CATEGORIA',\n", " '% CONSUMIDOR', 'MECANICA CONSUMIDOR', '% REVENDEDOR',\n", " 'MECANICA REVENDEDOR', 'TIPO DE PRODUTO', 'IAF', 'FOCO',\n", " 'PRODUTO SIMILAR', 'DESCRIÇÃO SIMILAR', 'CICLO SIMILAR',\n", " 'VENDAS CICLO LANÇAMENTO', 'C-4', 'C-3', 'C-2', 'C-1',\n", " 'VENDAS CICLO ATUAL', 'PICO VENDAS SIMILAR ULTIMOS 6 CICLOS',\n", " 'PV GINSENG', 'SUGESTÃO METASELLIN', 'SUGESTÃO ABASTECIMENTO',\n", " 'SUGESTÃO COMERCIAL', 'UF_CERTO'],\n", " dtype='object')" ] }, "execution_count": 107, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_final.columns" ] }, { "cell_type": "code", "execution_count": 108, "id": "f8cd886a", "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", "
SUPERVISORANALISTACANALUFPDVDESCRIÇÃO PDVPRODUTO LANÇAMENTODESCRIÇÃO DO LANÇAMENTOMARCACATEGORIA...C-4C-3C-2C-1VENDAS CICLO ATUALPICO VENDAS SIMILAR ULTIMOS 6 CICLOSPV GINSENGSUGESTÃO METASELLINSUGESTÃO ABASTECIMENTOSUGESTÃO COMERCIAL
0Efigênia HerculanoLUANLJAL12522MACEIO SHOP EXP59823NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...NATIVA SPACUIDADOS COM A PELE...2.03.00.02.00.03.027
1Maxwell VieiraJEFFERSONLJAL12817SHOPPING PATIO59823NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...NATIVA SPACUIDADOS COM A PELE...3.00.00.03.00.05.043
2Maxwell VieiraPEDROLJAL12818GB SERRARIA59823NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...NATIVA SPACUIDADOS COM A PELE...4.02.00.01.04.04.011
3Maxwell VieiraTHAYLLANLJAL12820ATACADÃO59823NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...NATIVA SPACUIDADOS COM A PELE...0.02.00.01.02.03.06
4Efigênia HerculanoMARCYARALJAL12823PONTA VERDE59823NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...NATIVA SPACUIDADOS COM A PELE...4.00.01.05.05.07.034
\n", "

5 rows × 31 columns

\n", "
" ], "text/plain": [ " SUPERVISOR ANALISTA CANAL UF PDV DESCRIÇÃO PDV \\\n", "0 Efigênia Herculano LUAN LJ AL 12522 MACEIO SHOP EXP \n", "1 Maxwell Vieira JEFFERSON LJ AL 12817 SHOPPING PATIO \n", "2 Maxwell Vieira PEDRO LJ AL 12818 GB SERRARIA \n", "3 Maxwell Vieira THAYLLAN LJ AL 12820 ATACADÃO \n", "4 Efigênia Herculano MARCYARA LJ AL 12823 PONTA VERDE \n", "\n", " PRODUTO LANÇAMENTO DESCRIÇÃO DO LANÇAMENTO \\\n", "0 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n", "1 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n", "2 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n", "3 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n", "4 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n", "\n", " MARCA CATEGORIA ... C-4 C-3 C-2 C-1 \\\n", "0 NATIVA SPA CUIDADOS COM A PELE ... 2.0 3.0 0.0 2.0 \n", "1 NATIVA SPA CUIDADOS COM A PELE ... 3.0 0.0 0.0 3.0 \n", "2 NATIVA SPA CUIDADOS COM A PELE ... 4.0 2.0 0.0 1.0 \n", "3 NATIVA SPA CUIDADOS COM A PELE ... 0.0 2.0 0.0 1.0 \n", "4 NATIVA SPA CUIDADOS COM A PELE ... 4.0 0.0 1.0 5.0 \n", "\n", " VENDAS CICLO ATUAL PICO VENDAS SIMILAR ULTIMOS 6 CICLOS PV GINSENG \\\n", "0 0.0 3.0 27 \n", "1 0.0 5.0 43 \n", "2 4.0 4.0 11 \n", "3 2.0 3.0 6 \n", "4 5.0 7.0 34 \n", "\n", " SUGESTÃO METASELLIN SUGESTÃO ABASTECIMENTO SUGESTÃO COMERCIAL \n", "0 \n", "1 \n", "2 \n", "3 \n", "4 \n", "\n", "[5 rows x 31 columns]" ] }, "execution_count": 108, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_final['UF']= df_final['UF_CERTO']\n", "\n", "df_final = df_final.drop(columns=['UF_CERTO'])\n", "\n", "df_final.head()" ] }, { "cell_type": "code", "execution_count": 110, "id": "2df3e2e9", "metadata": {}, "outputs": [], "source": [ "df_final.to_excel(f'C:/Users/joao.herculano/Documents/Lançamento{hoje}{ciclo_lanc}.xlsx',index=False)" ] } ], "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": 5 }