Ruptura_Projetada/promoção/promoção_EUD_ciclo07.ipynb
2025-08-26 13:57:11 -03:00

5275 lines
170 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "code",
"execution_count": 132,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\joao.herculano\\AppData\\Local\\Temp\\ipykernel_41628\\2131003807.py:50: UserWarning: pandas only supports SQLAlchemy connectable (engine/connection) or database string URI or sqlite3 DBAPI2 connection. Other DBAPI2 objects are not tested. Please consider using SQLAlchemy.\n",
" df0 = pd.read_sql(query, conn)\n"
]
}
],
"source": [
"import pyodbc\n",
"import configparser\n",
"import pandas as pd\n",
"import numpy as np \n",
"from datetime import datetime, time\n",
"\n",
"\n",
"config = configparser.ConfigParser()\n",
"config.read(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\CODIGOS\\relatório_improdutivo\\credenciais.ini\")\n",
"\n",
"# Conexão com o banco\n",
"conn = pyodbc.connect(\n",
" f\"DRIVER={{SQL Server}};\"\n",
" f\"SERVER={config['banco']['host']},1433;\"\n",
" f\"DATABASE=GINSENG;\"\n",
" f\"UID={config['banco']['user']};\"\n",
" f\"PWD={config['banco']['password']}\")\n",
"\n",
"#gerar query\n",
"query = '''\n",
"SELECT \n",
" e.pdv,\n",
" e.SKU,\n",
" COALESCE(e.SKU_PARA, e.SKU) AS SKU_FINAL,\n",
" MAX(e.[ESTOQUE ATUAL]) AS [ESTOQUE ATUAL],\n",
" MAX(e.[ESTOQUE EM TRANSITO]) AS [ESTOQUE EM TRANSITO],\n",
" MAX(e.[PEDIDO PENDENTE]) AS [PEDIDO PENDENTE],\n",
" d.salescurve AS Curva,\n",
" e.CATEGORIA,\n",
" d.dayswithoutsales AS DiasSemVenda,\n",
" d.nextcycleprojection,\n",
" d.secondtonextcycleprojection\n",
"FROM \n",
" estoque_mar e \n",
"LEFT JOIN draft d \n",
" ON d.loja_id = e.PDV \n",
" AND d.code = COALESCE(e.SKU_PARA, e.SKU)\n",
"WHERE \n",
" d.businessunit = 'EUD'\n",
"GROUP BY \n",
" e.pdv,\n",
" e.SKU,\n",
" COALESCE(e.SKU_PARA, e.SKU),\n",
" d.salescurve,\n",
" e.CATEGORIA,\n",
" d.dayswithoutsales,\n",
" d.nextcycleprojection,\n",
" d.secondtonextcycleprojection\n",
"'''\n",
"df0 = pd.read_sql(query, conn)\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 279,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>pdv</th>\n",
" <th>SKU</th>\n",
" <th>SKU_FINAL</th>\n",
" <th>ESTOQUE ATUAL</th>\n",
" <th>ESTOQUE EM TRANSITO</th>\n",
" <th>PEDIDO PENDENTE</th>\n",
" <th>Curva</th>\n",
" <th>CATEGORIA</th>\n",
" <th>DiasSemVenda</th>\n",
" <th>nextcycleprojection</th>\n",
" <th>secondtonextcycleprojection</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"Empty DataFrame\n",
"Columns: [pdv, SKU, SKU_FINAL, ESTOQUE ATUAL, ESTOQUE EM TRANSITO, PEDIDO PENDENTE, Curva, CATEGORIA, DiasSemVenda, nextcycleprojection, secondtonextcycleprojection]\n",
"Index: []"
]
},
"execution_count": 279,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df0[(df0['SKU'] == '93403') & (df0['pdv'] == 21375)]"
]
},
{
"cell_type": "code",
"execution_count": 134,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\joao.herculano\\AppData\\Local\\Temp\\ipykernel_41628\\1692316838.py:25: UserWarning: pandas only supports SQLAlchemy connectable (engine/connection) or database string URI or sqlite3 DBAPI2 connection. Other DBAPI2 objects are not tested. Please consider using SQLAlchemy.\n",
" dfv0 = pd.read_sql(query_vendas, conn)\n"
]
}
],
"source": [
"query_vendas = '''\n",
"SELECT \n",
"\tB.PDV, \n",
"\tB.SKU,\n",
"\tB.DESCRICAO,\n",
"\tSUM(CAST(b.VENDAS AS DECIMAL(18,2))) AS VENDAS_CICLO,\n",
"\tC.Ciclo\n",
"FROM base_vendas_bi b\n",
"INNER JOIN ciclos_data_2025 c \n",
" ON CAST(b.[DATA] AS DATE) = CONVERT(DATE, c.[Date], 103) AND C.MARCA = 'BOT'\n",
"LEFT JOIN (\n",
" SELECT SKU, MAX(ORIGEM) AS ORIGEM\n",
" FROM estoque_mar\n",
" GROUP BY SKU\n",
") e ON b.SKU = e.SKU\n",
"WHERE b.[DATA] > '2024-07-28'\n",
"GROUP BY\n",
"B.PDV, \n",
"\tB.SKU,\n",
"\tB.DESCRICAO,\n",
"\tC.Ciclo,\n",
"\tE.ORIGEM \n",
"'''\n",
"\n",
"dfv0 = pd.read_sql(query_vendas, conn)\n",
"\n",
"conn.close()"
]
},
{
"cell_type": "code",
"execution_count": 135,
"metadata": {},
"outputs": [],
"source": [
"df=df0"
]
},
{
"cell_type": "code",
"execution_count": 136,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>PDV</th>\n",
" <th>SKU</th>\n",
" <th>DESCRICAO</th>\n",
" <th>VENDAS_CICLO</th>\n",
" <th>Ciclo</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>12823</td>\n",
" <td>48664</td>\n",
" <td>BOTICOLL PORTINARI DES COL 100ml V5</td>\n",
" <td>1.0</td>\n",
" <td>C202411</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>12826</td>\n",
" <td>48060</td>\n",
" <td>LILY CREM DES HID ACET CPO 250g V8</td>\n",
" <td>7.0</td>\n",
" <td>C202414</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>20998</td>\n",
" <td>55142</td>\n",
" <td>CASA 214 DIFUS VARET BRIS/CEDROS 250ml</td>\n",
" <td>1.0</td>\n",
" <td>C202414</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>21495</td>\n",
" <td>52225</td>\n",
" <td>NSPA SAB BARR CPO AMEI 90g V6</td>\n",
" <td>0.0</td>\n",
" <td>C202412</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>20441</td>\n",
" <td>52016</td>\n",
" <td>NSPA CREM HID MAOS AMEI DOUR 75g</td>\n",
" <td>1.0</td>\n",
" <td>C202413</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" PDV SKU DESCRICAO VENDAS_CICLO Ciclo\n",
"0 12823 48664 BOTICOLL PORTINARI DES COL 100ml V5 1.0 C202411\n",
"1 12826 48060 LILY CREM DES HID ACET CPO 250g V8 7.0 C202414\n",
"2 20998 55142 CASA 214 DIFUS VARET BRIS/CEDROS 250ml 1.0 C202414\n",
"3 21495 52225 NSPA SAB BARR CPO AMEI 90g V6 0.0 C202412\n",
"4 20441 52016 NSPA CREM HID MAOS AMEI DOUR 75g 1.0 C202413"
]
},
"execution_count": 136,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dfv0.head()"
]
},
{
"cell_type": "code",
"execution_count": 137,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>PDV</th>\n",
" <th>SKU</th>\n",
" <th>DESCRICAO</th>\n",
" <th>C202411</th>\n",
" <th>C202412</th>\n",
" <th>C202413</th>\n",
" <th>C202414</th>\n",
" <th>C202415</th>\n",
" <th>C202416</th>\n",
" <th>C202417</th>\n",
" <th>...</th>\n",
" <th>C202503</th>\n",
" <th>C202504</th>\n",
" <th>C202505</th>\n",
" <th>C202506</th>\n",
" <th>C202507</th>\n",
" <th>C202508</th>\n",
" <th>C202509</th>\n",
" <th>C202510</th>\n",
" <th>C202511</th>\n",
" <th>C202512</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>11201</td>\n",
" <td>1004</td>\n",
" <td>FLORATTA DES COL MY BLUE 75ml</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>11201</td>\n",
" <td>1005</td>\n",
" <td>DEM FLORATTA DES COL MY BLUE 4ml</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>11201</td>\n",
" <td>1078</td>\n",
" <td>MATCH SRUM CAP POS QUIMICA 50ml</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>11201</td>\n",
" <td>1296</td>\n",
" <td>PMPCK THE BLEND DES ANTIT AER 2x75g</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>11201</td>\n",
" <td>1302</td>\n",
" <td>PMPCK LILY DES ANTIT AER 2x75g</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 22 columns</p>\n",
"</div>"
],
"text/plain": [
" PDV SKU DESCRICAO C202411 C202412 \\\n",
"0 11201 1004 FLORATTA DES COL MY BLUE 75ml 0.0 0.0 \n",
"1 11201 1005 DEM FLORATTA DES COL MY BLUE 4ml 0.0 0.0 \n",
"2 11201 1078 MATCH SRUM CAP POS QUIMICA 50ml 0.0 0.0 \n",
"3 11201 1296 PMPCK THE BLEND DES ANTIT AER 2x75g 0.0 0.0 \n",
"4 11201 1302 PMPCK LILY DES ANTIT AER 2x75g 0.0 0.0 \n",
"\n",
" C202413 C202414 C202415 C202416 C202417 ... C202503 C202504 \\\n",
"0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 \n",
"1 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 \n",
"2 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 \n",
"3 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 \n",
"4 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 \n",
"\n",
" C202505 C202506 C202507 C202508 C202509 C202510 C202511 C202512 \n",
"0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n",
"1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n",
"2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n",
"3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n",
"4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n",
"\n",
"[5 rows x 22 columns]"
]
},
"execution_count": 137,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\n",
"# 1. Agrupamento\n",
"df_agrupado = dfv0.groupby(['PDV', 'SKU', 'DESCRICAO', 'Ciclo'], as_index=False)['VENDAS_CICLO'].sum()\n",
"\n",
"# 2. Pivotar o DataFrame\n",
"df_pivotado = df_agrupado.pivot_table(\n",
" index=['PDV', 'SKU', 'DESCRICAO'],\n",
" columns='Ciclo',\n",
" values='VENDAS_CICLO',\n",
" fill_value=0 # Substitui NaN por 0\n",
")\n",
"\n",
"# 3. Resetar o índice para deixar como DataFrame normal (opcional)\n",
"df_vendas = df_pivotado.reset_index()\n",
"\n",
"# 4. (Opcional) Renomear colunas com prefixo \"Ciclo_\"\n",
"df_vendas.columns.name = None\n",
"df_vendas = df_vendas.rename(columns=lambda x: f'Ciclo_{x}' if isinstance(x, (int, str)) and str(x).isdigit() else x)\n",
"\n",
"# Resultado final\n",
"df_vendas.head()\n"
]
},
{
"cell_type": "code",
"execution_count": 138,
"metadata": {},
"outputs": [],
"source": [
"# O QUE PRECISA PRA RODAR ESSE CÓDIGO:\n",
"\n",
"# Arquivo Draft\n",
"# Arquivo Estoque\n",
"# Arquivo BI preço\n",
"# Arquivo pdv\n",
"# Arquivo Calendario\n",
"# Arquivo tabela de compra\n",
"\n",
"#Atualizar o nome da marca no filtro do estoque."
]
},
{
"cell_type": "code",
"execution_count": 139,
"metadata": {},
"outputs": [],
"source": [
"# Caminho onde estão as subpastas com os arquivos CSV\n",
"\n",
"# Set the path to the folder containing CSV files\n",
"#folder_path = r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\BD_LANÇAMENTOS\\EUDORA\\C13\\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",
"\n",
"#df_draft.shape\n"
]
},
{
"cell_type": "code",
"execution_count": 140,
"metadata": {},
"outputs": [],
"source": [
"\n",
"\n",
"#Caminho onde estão as subpastas com os arquivos CSV\n",
"#pasta_entrada = r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\BD_LANÇAMENTOS\\EUDORA\\C13\\estoque\"\n",
"\n",
"# Lista todas as subpastas dentro de \"ESTOQUE\"\n",
"#subpastas = [os.path.join(pasta_entrada, d) for d in os.listdir(pasta_entrada) if os.path.isdir(os.path.join(pasta_entrada, d))]\n",
"\n",
"#df_list = []\n",
"\n",
"# Percorre todas as subpastas\n",
"#for subpasta in subpastas:\n",
"# arquivos = [f for f in os.listdir(subpasta) if f.endswith(\".csv\")]\n",
"# nome_pasta = os.path.basename(subpasta) # Obtém o nome da pasta\n",
"\n",
"# for arquivo in arquivos:\n",
"# caminho_arquivo = os.path.join(subpasta, arquivo)\n",
"# try:\n",
"# df = pd.read_csv(caminho_arquivo, encoding=\"utf-8\", low_memory=False) # Melhor para grandes volumes de dados\n",
"# df[\"Arquivo_Origem\"] = arquivo # Adiciona o nome do arquivo de origem\n",
"# df[\"Pasta_Origem\"] = nome_pasta # Adiciona o nome da pasta de origem\n",
"# df_list.append(df)\n",
"# except Exception as e:\n",
"# print(f\"Erro ao ler o arquivo {arquivo}: {e}\")\n",
"\n",
"#if df_list:\n",
"# df_estoque = pd.concat(df_list, ignore_index=True)\n",
"\n",
"#df_estoque['PDV'] = df_estoque['PDV'].astype(str)\n",
"\n",
"#df_estoque['SKU_FINAL'] = np.where(df_estoque['SKU_PARA'] == \"-\", df_estoque['SKU'], df_estoque['SKU_PARA'])\n",
"\n",
"#df_estoque['SKU_FINAL']=df_estoque['SKU_FINAL'].astype(str)'''\n"
]
},
{
"cell_type": "code",
"execution_count": 141,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\styles\\stylesheet.py:237: UserWarning: Workbook contains no default style, apply openpyxl's default\n",
" warn(\"Workbook contains no default style, apply openpyxl's default\")\n"
]
}
],
"source": [
"df_bi_preco = pd.read_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\DB_PROMOÇÕES\\EUDORA\\202511\\preço BI\\TABELA DE PREÇOS (2).xlsx\")"
]
},
{
"cell_type": "code",
"execution_count": 142,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['SKU1', 'SKU2', 'Descrição', 'MARCA', 'CATEGORIA', 'LINHA', 'UF',\n",
" 'Tipo Preço', 'PC', 'PV'],\n",
" dtype='object')"
]
},
"execution_count": 142,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_bi_preco.columns"
]
},
{
"cell_type": "code",
"execution_count": 143,
"metadata": {},
"outputs": [],
"source": [
"df_pdv = pd.read_excel(r\"C:\\Users\\joao.herculano\\Documents\\PDV_ATT.xlsx\")\n",
"df_pdv = df_pdv.rename(columns={'DESCRIÇÃO':'DESCRIÇÃO PDV'})\n",
"df_pdv = df_pdv.drop(columns=['REGIÃO', 'ESTADO','CIDADE','GESTÃO', 'SUPERVISOR', 'STATUS'])\n",
"df_pdv = df_pdv[~df_pdv['CANAL'].isin(['MTZ','LJ'])]\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 144,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"PDV\n",
"20968 1\n",
"20969 1\n",
"20970 1\n",
"20986 1\n",
"20988 1\n",
"20989 1\n",
"20991 1\n",
"20992 1\n",
"20993 1\n",
"20994 1\n",
"20995 1\n",
"20996 1\n",
"20997 1\n",
"20998 1\n",
"20999 1\n",
"21000 1\n",
"21001 1\n",
"21278 1\n",
"21375 1\n",
"21383 1\n",
"21495 1\n",
"22448 1\n",
"22541 1\n",
"23703 1\n",
"23704 1\n",
"23711 1\n",
"23712 1\n",
"24255 1\n",
"24257 1\n",
"24269 1\n",
"24293 1\n",
"23813 1\n",
"Name: count, dtype: int64"
]
},
"execution_count": 144,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_pdv['PDV'].value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 145,
"metadata": {},
"outputs": [],
"source": [
"df_pdv['MATCH'] = 1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**ALTERAR NOME DA COLUNA \"ARQUIVO_ORIGEM\" PARA UMA DAS OPÇÕES ABAIXO:**\n",
"\n",
"*BOT.csv* \n",
"\n",
"*EUD.csv*\n",
"\n",
"*QDB.csv*"
]
},
{
"cell_type": "code",
"execution_count": 146,
"metadata": {},
"outputs": [],
"source": [
"#df_estoque = df_estoque[df_estoque['Arquivo_Origem']== \"EUD.csv\"]"
]
},
{
"cell_type": "code",
"execution_count": 147,
"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\")"
]
},
{
"cell_type": "code",
"execution_count": 148,
"metadata": {},
"outputs": [],
"source": [
"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",
"calendario['ANO_CICLO'] = calendario['Ciclo'].str[0:5]\n",
"\n",
"\n",
"calendario = calendario[calendario['MARCA'] == \"EUDORA\"]\n",
"\n",
"calendario['CICLOMAIS2'] = calendario['ANO_CICLO'].astype(str) + (calendario['NUM_CICLO'].astype(int) + 2).astype(str).str.zfill(2)\n",
"\n",
"ciclo_mais2 = calendario[calendario['Date'].dt.normalize() == today]['CICLOMAIS2'].iloc[0]\n",
"\n",
"\n",
"# Filter rows where date matches today\n",
"filtered_calendario = calendario[calendario['Ciclo'] == ciclo_mais2][:1]\n",
"\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"
]
},
{
"cell_type": "code",
"execution_count": 149,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Ciclo</th>\n",
" <th>INICIO CICLO</th>\n",
" <th>FIM CICLO</th>\n",
" <th>DURAÇÃO</th>\n",
" <th>MARCA</th>\n",
" <th>Date</th>\n",
" <th>NUM_CICLO</th>\n",
" <th>ANO_CICLO</th>\n",
" <th>CICLOMAIS2</th>\n",
" <th>dias_ate_inicio</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2388</th>\n",
" <td>C202514</td>\n",
" <td>2025-09-17</td>\n",
" <td>2025-10-07</td>\n",
" <td>21</td>\n",
" <td>EUDORA</td>\n",
" <td>2025-09-17</td>\n",
" <td>14</td>\n",
" <td>C2025</td>\n",
" <td>C202516</td>\n",
" <td>23</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Ciclo INICIO CICLO FIM CICLO DURAÇÃO MARCA Date NUM_CICLO \\\n",
"2388 C202514 2025-09-17 2025-10-07 21 EUDORA 2025-09-17 14 \n",
"\n",
" ANO_CICLO CICLOMAIS2 dias_ate_inicio \n",
"2388 C2025 C202516 23 "
]
},
"execution_count": 149,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"filtered_calendario"
]
},
{
"cell_type": "code",
"execution_count": 150,
"metadata": {},
"outputs": [],
"source": [
"filtered_calendario['match'] = 1"
]
},
{
"cell_type": "code",
"execution_count": 151,
"metadata": {},
"outputs": [],
"source": [
"df_pdv['UF'] = np.where(df_pdv['UF'] == 'VDC','BA',df_pdv['UF'])"
]
},
{
"cell_type": "code",
"execution_count": 152,
"metadata": {},
"outputs": [],
"source": [
"df_tabela = pd.read_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\DB_PROMOÇÕES\\EUDORA\\202513\\tabela promo\\TABELA-DE-PROMOS_C13-(1)-1752011522504.xlsx.xlsx\",skiprows=1)\n"
]
},
{
"cell_type": "code",
"execution_count": 153,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Ciclo</th>\n",
" <th>Veiculo</th>\n",
" <th>Tipo de Promoção</th>\n",
" <th>Estratégia de Promoção</th>\n",
" <th>Tipo_mecanica</th>\n",
" <th>Promo Período Limitado?</th>\n",
" <th>EAM</th>\n",
" <th>Categoria</th>\n",
" <th>Cód. Combo</th>\n",
" <th>Código do Item</th>\n",
" <th>...</th>\n",
" <th>0.34.2</th>\n",
" <th>0.35.2</th>\n",
" <th>0.2.3</th>\n",
" <th>0.25.3</th>\n",
" <th>0.28.3</th>\n",
" <th>0.3.3</th>\n",
" <th>0.32.3</th>\n",
" <th>0.34.3</th>\n",
" <th>0.35.3</th>\n",
" <th>BSO</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>202513</td>\n",
" <td>Guia CF</td>\n",
" <td>Promoção CF</td>\n",
" <td>Movimentar Flow</td>\n",
" <td>Desconto Direto</td>\n",
" <td>NaN</td>\n",
" <td>Não</td>\n",
" <td>PERF. FEMININA</td>\n",
" <td>NaN</td>\n",
" <td>85268</td>\n",
" <td>...</td>\n",
" <td>59.47</td>\n",
" <td>61.22</td>\n",
" <td>0.2</td>\n",
" <td>0.25</td>\n",
" <td>0.28</td>\n",
" <td>0.3</td>\n",
" <td>0.32</td>\n",
" <td>0.34</td>\n",
" <td>0.35</td>\n",
" <td>Sim</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>202513</td>\n",
" <td>Guia CF</td>\n",
" <td>Promoção CF</td>\n",
" <td>Movimentar Flow</td>\n",
" <td>Desconto Direto</td>\n",
" <td>NaN</td>\n",
" <td>Não</td>\n",
" <td>PERF. FEMININA</td>\n",
" <td>NaN</td>\n",
" <td>93541</td>\n",
" <td>...</td>\n",
" <td>30.57</td>\n",
" <td>31.47</td>\n",
" <td>0.2</td>\n",
" <td>0.25</td>\n",
" <td>0.28</td>\n",
" <td>0.3</td>\n",
" <td>0.32</td>\n",
" <td>0.34</td>\n",
" <td>0.35</td>\n",
" <td>Sim</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>202513</td>\n",
" <td>Guia CF</td>\n",
" <td>Promoção CF</td>\n",
" <td>Movimentar Flow</td>\n",
" <td>Desconto Direto</td>\n",
" <td>NaN</td>\n",
" <td>Não</td>\n",
" <td>PERF. FEMININA</td>\n",
" <td>NaN</td>\n",
" <td>53138</td>\n",
" <td>...</td>\n",
" <td>35.67</td>\n",
" <td>36.72</td>\n",
" <td>0.2</td>\n",
" <td>0.25</td>\n",
" <td>0.28</td>\n",
" <td>0.3</td>\n",
" <td>0.32</td>\n",
" <td>0.34</td>\n",
" <td>0.35</td>\n",
" <td>Sim</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>202513</td>\n",
" <td>Guia CF</td>\n",
" <td>Promoção CF</td>\n",
" <td>Movimentar Flow</td>\n",
" <td>Desconto Direto</td>\n",
" <td>NaN</td>\n",
" <td>Não</td>\n",
" <td>PERF. FEMININA</td>\n",
" <td>NaN</td>\n",
" <td>50762</td>\n",
" <td>...</td>\n",
" <td>23.43</td>\n",
" <td>24.12</td>\n",
" <td>0.2</td>\n",
" <td>0.25</td>\n",
" <td>0.28</td>\n",
" <td>0.3</td>\n",
" <td>0.32</td>\n",
" <td>0.34</td>\n",
" <td>0.35</td>\n",
" <td>Sim</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>202513</td>\n",
" <td>Guia CF</td>\n",
" <td>Promoção CF</td>\n",
" <td>Movimentar Flow</td>\n",
" <td>Desconto Direto</td>\n",
" <td>NaN</td>\n",
" <td>Não</td>\n",
" <td>PERF. FEMININA</td>\n",
" <td>NaN</td>\n",
" <td>49803</td>\n",
" <td>...</td>\n",
" <td>28.53</td>\n",
" <td>29.37</td>\n",
" <td>0.2</td>\n",
" <td>0.25</td>\n",
" <td>0.28</td>\n",
" <td>0.3</td>\n",
" <td>0.32</td>\n",
" <td>0.34</td>\n",
" <td>0.35</td>\n",
" <td>Sim</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 47 columns</p>\n",
"</div>"
],
"text/plain": [
" Ciclo Veiculo Tipo de Promoção Estratégia de Promoção Tipo_mecanica \\\n",
"0 202513 Guia CF Promoção CF Movimentar Flow Desconto Direto \n",
"1 202513 Guia CF Promoção CF Movimentar Flow Desconto Direto \n",
"2 202513 Guia CF Promoção CF Movimentar Flow Desconto Direto \n",
"3 202513 Guia CF Promoção CF Movimentar Flow Desconto Direto \n",
"4 202513 Guia CF Promoção CF Movimentar Flow Desconto Direto \n",
"\n",
" Promo Período Limitado? EAM Categoria Cód. Combo Código do Item \\\n",
"0 NaN Não PERF. FEMININA NaN 85268 \n",
"1 NaN Não PERF. FEMININA NaN 93541 \n",
"2 NaN Não PERF. FEMININA NaN 53138 \n",
"3 NaN Não PERF. FEMININA NaN 50762 \n",
"4 NaN Não PERF. FEMININA NaN 49803 \n",
"\n",
" ... 0.34.2 0.35.2 0.2.3 0.25.3 0.28.3 0.3.3 0.32.3 0.34.3 0.35.3 \\\n",
"0 ... 59.47 61.22 0.2 0.25 0.28 0.3 0.32 0.34 0.35 \n",
"1 ... 30.57 31.47 0.2 0.25 0.28 0.3 0.32 0.34 0.35 \n",
"2 ... 35.67 36.72 0.2 0.25 0.28 0.3 0.32 0.34 0.35 \n",
"3 ... 23.43 24.12 0.2 0.25 0.28 0.3 0.32 0.34 0.35 \n",
"4 ... 28.53 29.37 0.2 0.25 0.28 0.3 0.32 0.34 0.35 \n",
"\n",
" BSO \n",
"0 Sim \n",
"1 Sim \n",
"2 Sim \n",
"3 Sim \n",
"4 Sim \n",
"\n",
"[5 rows x 47 columns]"
]
},
"execution_count": 153,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_tabela.head()"
]
},
{
"cell_type": "code",
"execution_count": 154,
"metadata": {},
"outputs": [],
"source": [
"df_tabela = df_tabela[[ 'Ciclo', 'Veiculo',\n",
" 'Tipo de Promoção', 'Estratégia de Promoção',\n",
" 'Tipo_mecanica', 'Promo Período Limitado?',\n",
" 'EAM', 'Categoria',\n",
" 'Cód. Combo', 'Código do Item',\n",
" 'Descrição do Item', 'Chamada Promocional',\n",
" 'Valor do Guia', 'Preço Promocionado',\n",
" '% de Desconto', 'RE compra por',\n",
" 'RE Vende por', 'RE lucra (R$)']]"
]
},
{
"cell_type": "code",
"execution_count": 155,
"metadata": {},
"outputs": [],
"source": [
"df_tabela['Código do Item'] = df_tabela['Código do Item'].astype(str).str.replace(\".0\",\"\",regex=False)"
]
},
{
"cell_type": "code",
"execution_count": 156,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Ciclo</th>\n",
" <th>Veiculo</th>\n",
" <th>Tipo de Promoção</th>\n",
" <th>Estratégia de Promoção</th>\n",
" <th>Tipo_mecanica</th>\n",
" <th>Promo Período Limitado?</th>\n",
" <th>EAM</th>\n",
" <th>Categoria</th>\n",
" <th>Cód. Combo</th>\n",
" <th>Código do Item</th>\n",
" <th>Descrição do Item</th>\n",
" <th>Chamada Promocional</th>\n",
" <th>Valor do Guia</th>\n",
" <th>Preço Promocionado</th>\n",
" <th>% de Desconto</th>\n",
" <th>RE compra por</th>\n",
" <th>RE Vende por</th>\n",
" <th>RE lucra (R$)</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>202513</td>\n",
" <td>Guia CF</td>\n",
" <td>Promoção CF</td>\n",
" <td>Movimentar Flow</td>\n",
" <td>Desconto Direto</td>\n",
" <td>NaN</td>\n",
" <td>Não</td>\n",
" <td>PERF. FEMININA</td>\n",
" <td>NaN</td>\n",
" <td>85268</td>\n",
" <td>EUDORA EAU DE PARFUM ROSÉ V2, 75 ml</td>\n",
" <td>EUDORA EAU DE PARFUM ROSÉ V2, 75 ml | DE R$234...</td>\n",
" <td>234.9</td>\n",
" <td>174.9</td>\n",
" <td>0.255</td>\n",
" <td>122.43</td>\n",
" <td>174.9</td>\n",
" <td>52.47</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>202513</td>\n",
" <td>Guia CF</td>\n",
" <td>Promoção CF</td>\n",
" <td>Movimentar Flow</td>\n",
" <td>Desconto Direto</td>\n",
" <td>NaN</td>\n",
" <td>Não</td>\n",
" <td>PERF. FEMININA</td>\n",
" <td>NaN</td>\n",
" <td>93541</td>\n",
" <td>DIVA ESPLÊNDIDA DESODORANTE COLONIA 100ml</td>\n",
" <td>FESTIVAL DE PERFUMARIA - ATÉ 40% OFF: DIVA ESP...</td>\n",
" <td>139.9</td>\n",
" <td>89.9</td>\n",
" <td>0.357</td>\n",
" <td>62.93</td>\n",
" <td>89.9</td>\n",
" <td>26.97</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>202513</td>\n",
" <td>Guia CF</td>\n",
" <td>Promoção CF</td>\n",
" <td>Movimentar Flow</td>\n",
" <td>Desconto Direto</td>\n",
" <td>NaN</td>\n",
" <td>Não</td>\n",
" <td>PERF. FEMININA</td>\n",
" <td>NaN</td>\n",
" <td>53138</td>\n",
" <td>EUDORA IMENSI DESODORANTE COLÔNIA SANCHO 100 ML</td>\n",
" <td>FESTIVAL DE PERFUMARIA - ATÉ 40% OFF: EUDORA I...</td>\n",
" <td>149.9</td>\n",
" <td>104.9</td>\n",
" <td>0.300</td>\n",
" <td>73.43</td>\n",
" <td>104.9</td>\n",
" <td>31.47</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>202513</td>\n",
" <td>Guia CF</td>\n",
" <td>Promoção CF</td>\n",
" <td>Movimentar Flow</td>\n",
" <td>Desconto Direto</td>\n",
" <td>NaN</td>\n",
" <td>Não</td>\n",
" <td>PERF. FEMININA</td>\n",
" <td>NaN</td>\n",
" <td>50762</td>\n",
" <td>EUDORA VELVET SENSUAL DESODORANTE COLÔNIA 100ML</td>\n",
" <td>FESTIVAL DE PERFUMARIA - ATÉ 40% OFF: EUDORA V...</td>\n",
" <td>119.9</td>\n",
" <td>68.9</td>\n",
" <td>0.425</td>\n",
" <td>48.23</td>\n",
" <td>68.9</td>\n",
" <td>20.67</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>202513</td>\n",
" <td>Guia CF</td>\n",
" <td>Promoção CF</td>\n",
" <td>Movimentar Flow</td>\n",
" <td>Desconto Direto</td>\n",
" <td>NaN</td>\n",
" <td>Não</td>\n",
" <td>PERF. FEMININA</td>\n",
" <td>NaN</td>\n",
" <td>49803</td>\n",
" <td>CHIC DES COL RETRO 95ml V2</td>\n",
" <td>FESTIVAL DE PERFUMARIA - ATÉ 40% OFF: CHIC DES...</td>\n",
" <td>119.9</td>\n",
" <td>83.9</td>\n",
" <td>0.300</td>\n",
" <td>58.73</td>\n",
" <td>83.9</td>\n",
" <td>25.17</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Ciclo Veiculo Tipo de Promoção Estratégia de Promoção Tipo_mecanica \\\n",
"0 202513 Guia CF Promoção CF Movimentar Flow Desconto Direto \n",
"1 202513 Guia CF Promoção CF Movimentar Flow Desconto Direto \n",
"2 202513 Guia CF Promoção CF Movimentar Flow Desconto Direto \n",
"3 202513 Guia CF Promoção CF Movimentar Flow Desconto Direto \n",
"4 202513 Guia CF Promoção CF Movimentar Flow Desconto Direto \n",
"\n",
" Promo Período Limitado? EAM Categoria Cód. Combo Código do Item \\\n",
"0 NaN Não PERF. FEMININA NaN 85268 \n",
"1 NaN Não PERF. FEMININA NaN 93541 \n",
"2 NaN Não PERF. FEMININA NaN 53138 \n",
"3 NaN Não PERF. FEMININA NaN 50762 \n",
"4 NaN Não PERF. FEMININA NaN 49803 \n",
"\n",
" Descrição do Item \\\n",
"0 EUDORA EAU DE PARFUM ROSÉ V2, 75 ml \n",
"1 DIVA ESPLÊNDIDA DESODORANTE COLONIA 100ml \n",
"2 EUDORA IMENSI DESODORANTE COLÔNIA SANCHO 100 ML \n",
"3 EUDORA VELVET SENSUAL DESODORANTE COLÔNIA 100ML \n",
"4 CHIC DES COL RETRO 95ml V2 \n",
"\n",
" Chamada Promocional Valor do Guia \\\n",
"0 EUDORA EAU DE PARFUM ROSÉ V2, 75 ml | DE R$234... 234.9 \n",
"1 FESTIVAL DE PERFUMARIA - ATÉ 40% OFF: DIVA ESP... 139.9 \n",
"2 FESTIVAL DE PERFUMARIA - ATÉ 40% OFF: EUDORA I... 149.9 \n",
"3 FESTIVAL DE PERFUMARIA - ATÉ 40% OFF: EUDORA V... 119.9 \n",
"4 FESTIVAL DE PERFUMARIA - ATÉ 40% OFF: CHIC DES... 119.9 \n",
"\n",
" Preço Promocionado % de Desconto RE compra por RE Vende por \\\n",
"0 174.9 0.255 122.43 174.9 \n",
"1 89.9 0.357 62.93 89.9 \n",
"2 104.9 0.300 73.43 104.9 \n",
"3 68.9 0.425 48.23 68.9 \n",
"4 83.9 0.300 58.73 83.9 \n",
"\n",
" RE lucra (R$) \n",
"0 52.47 \n",
"1 26.97 \n",
"2 31.47 \n",
"3 20.67 \n",
"4 25.17 "
]
},
"execution_count": 156,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_tabela.head()"
]
},
{
"cell_type": "code",
"execution_count": 157,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Ciclo</th>\n",
" <th>Veiculo</th>\n",
" <th>Tipo de Promoção</th>\n",
" <th>Estratégia de Promoção</th>\n",
" <th>Tipo_mecanica</th>\n",
" <th>Promo Período Limitado?</th>\n",
" <th>EAM</th>\n",
" <th>Categoria</th>\n",
" <th>Cód. Combo</th>\n",
" <th>Código do Item</th>\n",
" <th>Descrição do Item</th>\n",
" <th>Chamada Promocional</th>\n",
" <th>Valor do Guia</th>\n",
" <th>Preço Promocionado</th>\n",
" <th>% de Desconto</th>\n",
" <th>RE compra por</th>\n",
" <th>RE Vende por</th>\n",
" <th>RE lucra (R$)</th>\n",
" <th>SKU</th>\n",
" <th>SKU_FINAL</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>202513</td>\n",
" <td>Guia CF</td>\n",
" <td>Promoção CF</td>\n",
" <td>Movimentar Flow</td>\n",
" <td>Desconto Direto</td>\n",
" <td>NaN</td>\n",
" <td>Não</td>\n",
" <td>PERF. FEMININA</td>\n",
" <td>NaN</td>\n",
" <td>85268</td>\n",
" <td>EUDORA EAU DE PARFUM ROSÉ V2, 75 ml</td>\n",
" <td>EUDORA EAU DE PARFUM ROSÉ V2, 75 ml | DE R$234...</td>\n",
" <td>234.9</td>\n",
" <td>174.9</td>\n",
" <td>0.255</td>\n",
" <td>122.43</td>\n",
" <td>174.9</td>\n",
" <td>52.47</td>\n",
" <td>85268</td>\n",
" <td>56572</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>202513</td>\n",
" <td>Guia CF</td>\n",
" <td>Promoção CF</td>\n",
" <td>Movimentar Flow</td>\n",
" <td>Desconto Direto</td>\n",
" <td>NaN</td>\n",
" <td>Não</td>\n",
" <td>PERF. FEMININA</td>\n",
" <td>NaN</td>\n",
" <td>85268</td>\n",
" <td>EUDORA EAU DE PARFUM ROSÉ V2, 75 ml</td>\n",
" <td>EUDORA EAU DE PARFUM ROSÉ V2, 75 ml | DE R$234...</td>\n",
" <td>234.9</td>\n",
" <td>174.9</td>\n",
" <td>0.255</td>\n",
" <td>122.43</td>\n",
" <td>174.9</td>\n",
" <td>52.47</td>\n",
" <td>85268</td>\n",
" <td>56572</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>202513</td>\n",
" <td>Guia CF</td>\n",
" <td>Promoção CF</td>\n",
" <td>Movimentar Flow</td>\n",
" <td>Desconto Direto</td>\n",
" <td>NaN</td>\n",
" <td>Não</td>\n",
" <td>PERF. FEMININA</td>\n",
" <td>NaN</td>\n",
" <td>85268</td>\n",
" <td>EUDORA EAU DE PARFUM ROSÉ V2, 75 ml</td>\n",
" <td>EUDORA EAU DE PARFUM ROSÉ V2, 75 ml | DE R$234...</td>\n",
" <td>234.9</td>\n",
" <td>174.9</td>\n",
" <td>0.255</td>\n",
" <td>122.43</td>\n",
" <td>174.9</td>\n",
" <td>52.47</td>\n",
" <td>85268</td>\n",
" <td>56572</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>202513</td>\n",
" <td>Guia CF</td>\n",
" <td>Promoção CF</td>\n",
" <td>Movimentar Flow</td>\n",
" <td>Desconto Direto</td>\n",
" <td>NaN</td>\n",
" <td>Não</td>\n",
" <td>PERF. FEMININA</td>\n",
" <td>NaN</td>\n",
" <td>85268</td>\n",
" <td>EUDORA EAU DE PARFUM ROSÉ V2, 75 ml</td>\n",
" <td>EUDORA EAU DE PARFUM ROSÉ V2, 75 ml | DE R$234...</td>\n",
" <td>234.9</td>\n",
" <td>174.9</td>\n",
" <td>0.255</td>\n",
" <td>122.43</td>\n",
" <td>174.9</td>\n",
" <td>52.47</td>\n",
" <td>85268</td>\n",
" <td>56572</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>202513</td>\n",
" <td>Guia CF</td>\n",
" <td>Promoção CF</td>\n",
" <td>Movimentar Flow</td>\n",
" <td>Desconto Direto</td>\n",
" <td>NaN</td>\n",
" <td>Não</td>\n",
" <td>PERF. FEMININA</td>\n",
" <td>NaN</td>\n",
" <td>85268</td>\n",
" <td>EUDORA EAU DE PARFUM ROSÉ V2, 75 ml</td>\n",
" <td>EUDORA EAU DE PARFUM ROSÉ V2, 75 ml | DE R$234...</td>\n",
" <td>234.9</td>\n",
" <td>174.9</td>\n",
" <td>0.255</td>\n",
" <td>122.43</td>\n",
" <td>174.9</td>\n",
" <td>52.47</td>\n",
" <td>85268</td>\n",
" <td>56572</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Ciclo Veiculo Tipo de Promoção Estratégia de Promoção Tipo_mecanica \\\n",
"0 202513 Guia CF Promoção CF Movimentar Flow Desconto Direto \n",
"1 202513 Guia CF Promoção CF Movimentar Flow Desconto Direto \n",
"2 202513 Guia CF Promoção CF Movimentar Flow Desconto Direto \n",
"3 202513 Guia CF Promoção CF Movimentar Flow Desconto Direto \n",
"4 202513 Guia CF Promoção CF Movimentar Flow Desconto Direto \n",
"\n",
" Promo Período Limitado? EAM Categoria Cód. Combo Código do Item \\\n",
"0 NaN Não PERF. FEMININA NaN 85268 \n",
"1 NaN Não PERF. FEMININA NaN 85268 \n",
"2 NaN Não PERF. FEMININA NaN 85268 \n",
"3 NaN Não PERF. FEMININA NaN 85268 \n",
"4 NaN Não PERF. FEMININA NaN 85268 \n",
"\n",
" Descrição do Item \\\n",
"0 EUDORA EAU DE PARFUM ROSÉ V2, 75 ml \n",
"1 EUDORA EAU DE PARFUM ROSÉ V2, 75 ml \n",
"2 EUDORA EAU DE PARFUM ROSÉ V2, 75 ml \n",
"3 EUDORA EAU DE PARFUM ROSÉ V2, 75 ml \n",
"4 EUDORA EAU DE PARFUM ROSÉ V2, 75 ml \n",
"\n",
" Chamada Promocional Valor do Guia \\\n",
"0 EUDORA EAU DE PARFUM ROSÉ V2, 75 ml | DE R$234... 234.9 \n",
"1 EUDORA EAU DE PARFUM ROSÉ V2, 75 ml | DE R$234... 234.9 \n",
"2 EUDORA EAU DE PARFUM ROSÉ V2, 75 ml | DE R$234... 234.9 \n",
"3 EUDORA EAU DE PARFUM ROSÉ V2, 75 ml | DE R$234... 234.9 \n",
"4 EUDORA EAU DE PARFUM ROSÉ V2, 75 ml | DE R$234... 234.9 \n",
"\n",
" Preço Promocionado % de Desconto RE compra por RE Vende por \\\n",
"0 174.9 0.255 122.43 174.9 \n",
"1 174.9 0.255 122.43 174.9 \n",
"2 174.9 0.255 122.43 174.9 \n",
"3 174.9 0.255 122.43 174.9 \n",
"4 174.9 0.255 122.43 174.9 \n",
"\n",
" RE lucra (R$) SKU SKU_FINAL \n",
"0 52.47 85268 56572 \n",
"1 52.47 85268 56572 \n",
"2 52.47 85268 56572 \n",
"3 52.47 85268 56572 \n",
"4 52.47 85268 56572 "
]
},
"execution_count": 157,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_tabela = pd.merge(left=df_tabela,right=df0[['SKU','SKU_FINAL']],left_on='Código do Item',right_on='SKU',how='left')\n",
"df_tabela.head()"
]
},
{
"cell_type": "code",
"execution_count": 158,
"metadata": {},
"outputs": [],
"source": [
"df_tabela['Código do Item'] = np.where(df_tabela['SKU_FINAL'].notna(),df_tabela['SKU_FINAL'],df_tabela['Código do Item'])"
]
},
{
"cell_type": "code",
"execution_count": 159,
"metadata": {},
"outputs": [],
"source": [
"df_tabela = df_tabela.drop(columns=['SKU','SKU_FINAL'])"
]
},
{
"cell_type": "code",
"execution_count": 160,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Ciclo</th>\n",
" <th>Veiculo</th>\n",
" <th>Tipo de Promoção</th>\n",
" <th>Estratégia de Promoção</th>\n",
" <th>Tipo_mecanica</th>\n",
" <th>Promo Período Limitado?</th>\n",
" <th>EAM</th>\n",
" <th>Categoria</th>\n",
" <th>Cód. Combo</th>\n",
" <th>Código do Item</th>\n",
" <th>Descrição do Item</th>\n",
" <th>Chamada Promocional</th>\n",
" <th>Valor do Guia</th>\n",
" <th>Preço Promocionado</th>\n",
" <th>% de Desconto</th>\n",
" <th>RE compra por</th>\n",
" <th>RE Vende por</th>\n",
" <th>RE lucra (R$)</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>202513</td>\n",
" <td>Guia CF</td>\n",
" <td>Promoção CF</td>\n",
" <td>Movimentar Flow</td>\n",
" <td>Desconto Direto</td>\n",
" <td>NaN</td>\n",
" <td>Não</td>\n",
" <td>PERF. FEMININA</td>\n",
" <td>NaN</td>\n",
" <td>56572</td>\n",
" <td>EUDORA EAU DE PARFUM ROSÉ V2, 75 ml</td>\n",
" <td>EUDORA EAU DE PARFUM ROSÉ V2, 75 ml | DE R$234...</td>\n",
" <td>234.9</td>\n",
" <td>174.9</td>\n",
" <td>0.255</td>\n",
" <td>122.43</td>\n",
" <td>174.9</td>\n",
" <td>52.47</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>202513</td>\n",
" <td>Guia CF</td>\n",
" <td>Promoção CF</td>\n",
" <td>Movimentar Flow</td>\n",
" <td>Desconto Direto</td>\n",
" <td>NaN</td>\n",
" <td>Não</td>\n",
" <td>PERF. FEMININA</td>\n",
" <td>NaN</td>\n",
" <td>56572</td>\n",
" <td>EUDORA EAU DE PARFUM ROSÉ V2, 75 ml</td>\n",
" <td>EUDORA EAU DE PARFUM ROSÉ V2, 75 ml | DE R$234...</td>\n",
" <td>234.9</td>\n",
" <td>174.9</td>\n",
" <td>0.255</td>\n",
" <td>122.43</td>\n",
" <td>174.9</td>\n",
" <td>52.47</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>202513</td>\n",
" <td>Guia CF</td>\n",
" <td>Promoção CF</td>\n",
" <td>Movimentar Flow</td>\n",
" <td>Desconto Direto</td>\n",
" <td>NaN</td>\n",
" <td>Não</td>\n",
" <td>PERF. FEMININA</td>\n",
" <td>NaN</td>\n",
" <td>56572</td>\n",
" <td>EUDORA EAU DE PARFUM ROSÉ V2, 75 ml</td>\n",
" <td>EUDORA EAU DE PARFUM ROSÉ V2, 75 ml | DE R$234...</td>\n",
" <td>234.9</td>\n",
" <td>174.9</td>\n",
" <td>0.255</td>\n",
" <td>122.43</td>\n",
" <td>174.9</td>\n",
" <td>52.47</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>202513</td>\n",
" <td>Guia CF</td>\n",
" <td>Promoção CF</td>\n",
" <td>Movimentar Flow</td>\n",
" <td>Desconto Direto</td>\n",
" <td>NaN</td>\n",
" <td>Não</td>\n",
" <td>PERF. FEMININA</td>\n",
" <td>NaN</td>\n",
" <td>56572</td>\n",
" <td>EUDORA EAU DE PARFUM ROSÉ V2, 75 ml</td>\n",
" <td>EUDORA EAU DE PARFUM ROSÉ V2, 75 ml | DE R$234...</td>\n",
" <td>234.9</td>\n",
" <td>174.9</td>\n",
" <td>0.255</td>\n",
" <td>122.43</td>\n",
" <td>174.9</td>\n",
" <td>52.47</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>202513</td>\n",
" <td>Guia CF</td>\n",
" <td>Promoção CF</td>\n",
" <td>Movimentar Flow</td>\n",
" <td>Desconto Direto</td>\n",
" <td>NaN</td>\n",
" <td>Não</td>\n",
" <td>PERF. FEMININA</td>\n",
" <td>NaN</td>\n",
" <td>56572</td>\n",
" <td>EUDORA EAU DE PARFUM ROSÉ V2, 75 ml</td>\n",
" <td>EUDORA EAU DE PARFUM ROSÉ V2, 75 ml | DE R$234...</td>\n",
" <td>234.9</td>\n",
" <td>174.9</td>\n",
" <td>0.255</td>\n",
" <td>122.43</td>\n",
" <td>174.9</td>\n",
" <td>52.47</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Ciclo Veiculo Tipo de Promoção Estratégia de Promoção Tipo_mecanica \\\n",
"0 202513 Guia CF Promoção CF Movimentar Flow Desconto Direto \n",
"1 202513 Guia CF Promoção CF Movimentar Flow Desconto Direto \n",
"2 202513 Guia CF Promoção CF Movimentar Flow Desconto Direto \n",
"3 202513 Guia CF Promoção CF Movimentar Flow Desconto Direto \n",
"4 202513 Guia CF Promoção CF Movimentar Flow Desconto Direto \n",
"\n",
" Promo Período Limitado? EAM Categoria Cód. Combo Código do Item \\\n",
"0 NaN Não PERF. FEMININA NaN 56572 \n",
"1 NaN Não PERF. FEMININA NaN 56572 \n",
"2 NaN Não PERF. FEMININA NaN 56572 \n",
"3 NaN Não PERF. FEMININA NaN 56572 \n",
"4 NaN Não PERF. FEMININA NaN 56572 \n",
"\n",
" Descrição do Item \\\n",
"0 EUDORA EAU DE PARFUM ROSÉ V2, 75 ml \n",
"1 EUDORA EAU DE PARFUM ROSÉ V2, 75 ml \n",
"2 EUDORA EAU DE PARFUM ROSÉ V2, 75 ml \n",
"3 EUDORA EAU DE PARFUM ROSÉ V2, 75 ml \n",
"4 EUDORA EAU DE PARFUM ROSÉ V2, 75 ml \n",
"\n",
" Chamada Promocional Valor do Guia \\\n",
"0 EUDORA EAU DE PARFUM ROSÉ V2, 75 ml | DE R$234... 234.9 \n",
"1 EUDORA EAU DE PARFUM ROSÉ V2, 75 ml | DE R$234... 234.9 \n",
"2 EUDORA EAU DE PARFUM ROSÉ V2, 75 ml | DE R$234... 234.9 \n",
"3 EUDORA EAU DE PARFUM ROSÉ V2, 75 ml | DE R$234... 234.9 \n",
"4 EUDORA EAU DE PARFUM ROSÉ V2, 75 ml | DE R$234... 234.9 \n",
"\n",
" Preço Promocionado % de Desconto RE compra por RE Vende por \\\n",
"0 174.9 0.255 122.43 174.9 \n",
"1 174.9 0.255 122.43 174.9 \n",
"2 174.9 0.255 122.43 174.9 \n",
"3 174.9 0.255 122.43 174.9 \n",
"4 174.9 0.255 122.43 174.9 \n",
"\n",
" RE lucra (R$) \n",
"0 52.47 \n",
"1 52.47 \n",
"2 52.47 \n",
"3 52.47 \n",
"4 52.47 "
]
},
"execution_count": 160,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_tabela.head()"
]
},
{
"cell_type": "code",
"execution_count": 161,
"metadata": {},
"outputs": [],
"source": [
"df_tabela['MATCH'] = 1"
]
},
{
"cell_type": "code",
"execution_count": 162,
"metadata": {},
"outputs": [],
"source": [
"df_tabela = pd.merge(left=df_tabela,right=df_pdv[['PDV','MATCH','UF','DESCRIÇÃO PDV','ANALISTA']],on='MATCH',how='inner')"
]
},
{
"cell_type": "code",
"execution_count": 163,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Ciclo</th>\n",
" <th>Veiculo</th>\n",
" <th>Tipo de Promoção</th>\n",
" <th>Estratégia de Promoção</th>\n",
" <th>Tipo_mecanica</th>\n",
" <th>Promo Período Limitado?</th>\n",
" <th>EAM</th>\n",
" <th>Categoria</th>\n",
" <th>Cód. Combo</th>\n",
" <th>Código do Item</th>\n",
" <th>...</th>\n",
" <th>Preço Promocionado</th>\n",
" <th>% de Desconto</th>\n",
" <th>RE compra por</th>\n",
" <th>RE Vende por</th>\n",
" <th>RE lucra (R$)</th>\n",
" <th>MATCH</th>\n",
" <th>PDV</th>\n",
" <th>UF</th>\n",
" <th>DESCRIÇÃO PDV</th>\n",
" <th>ANALISTA</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>202513</td>\n",
" <td>Guia CF</td>\n",
" <td>Promoção CF</td>\n",
" <td>Movimentar Flow</td>\n",
" <td>Desconto Direto</td>\n",
" <td>NaN</td>\n",
" <td>Não</td>\n",
" <td>PERF. FEMININA</td>\n",
" <td>NaN</td>\n",
" <td>56572</td>\n",
" <td>...</td>\n",
" <td>174.9</td>\n",
" <td>0.255</td>\n",
" <td>122.43</td>\n",
" <td>174.9</td>\n",
" <td>52.47</td>\n",
" <td>1</td>\n",
" <td>20968</td>\n",
" <td>SE</td>\n",
" <td>HIB ITABAIANINHA</td>\n",
" <td>MARCYARA</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>202513</td>\n",
" <td>Guia CF</td>\n",
" <td>Promoção CF</td>\n",
" <td>Movimentar Flow</td>\n",
" <td>Desconto Direto</td>\n",
" <td>NaN</td>\n",
" <td>Não</td>\n",
" <td>PERF. FEMININA</td>\n",
" <td>NaN</td>\n",
" <td>56572</td>\n",
" <td>...</td>\n",
" <td>174.9</td>\n",
" <td>0.255</td>\n",
" <td>122.43</td>\n",
" <td>174.9</td>\n",
" <td>52.47</td>\n",
" <td>1</td>\n",
" <td>20969</td>\n",
" <td>AL</td>\n",
" <td>HIB MARECHAL DEOD</td>\n",
" <td>HARY</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>202513</td>\n",
" <td>Guia CF</td>\n",
" <td>Promoção CF</td>\n",
" <td>Movimentar Flow</td>\n",
" <td>Desconto Direto</td>\n",
" <td>NaN</td>\n",
" <td>Não</td>\n",
" <td>PERF. FEMININA</td>\n",
" <td>NaN</td>\n",
" <td>56572</td>\n",
" <td>...</td>\n",
" <td>174.9</td>\n",
" <td>0.255</td>\n",
" <td>122.43</td>\n",
" <td>174.9</td>\n",
" <td>52.47</td>\n",
" <td>1</td>\n",
" <td>20970</td>\n",
" <td>BA</td>\n",
" <td>ER SAO SEBASTIAO</td>\n",
" <td>DARLIN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>202513</td>\n",
" <td>Guia CF</td>\n",
" <td>Promoção CF</td>\n",
" <td>Movimentar Flow</td>\n",
" <td>Desconto Direto</td>\n",
" <td>NaN</td>\n",
" <td>Não</td>\n",
" <td>PERF. FEMININA</td>\n",
" <td>NaN</td>\n",
" <td>56572</td>\n",
" <td>...</td>\n",
" <td>174.9</td>\n",
" <td>0.255</td>\n",
" <td>122.43</td>\n",
" <td>174.9</td>\n",
" <td>52.47</td>\n",
" <td>1</td>\n",
" <td>20986</td>\n",
" <td>BA</td>\n",
" <td>HIB OLINDINA</td>\n",
" <td>LUCAS</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>202513</td>\n",
" <td>Guia CF</td>\n",
" <td>Promoção CF</td>\n",
" <td>Movimentar Flow</td>\n",
" <td>Desconto Direto</td>\n",
" <td>NaN</td>\n",
" <td>Não</td>\n",
" <td>PERF. FEMININA</td>\n",
" <td>NaN</td>\n",
" <td>56572</td>\n",
" <td>...</td>\n",
" <td>174.9</td>\n",
" <td>0.255</td>\n",
" <td>122.43</td>\n",
" <td>174.9</td>\n",
" <td>52.47</td>\n",
" <td>1</td>\n",
" <td>20988</td>\n",
" <td>BA</td>\n",
" <td>HIB QUEIMADAS</td>\n",
" <td>DARLIN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 23 columns</p>\n",
"</div>"
],
"text/plain": [
" Ciclo Veiculo Tipo de Promoção Estratégia de Promoção Tipo_mecanica \\\n",
"0 202513 Guia CF Promoção CF Movimentar Flow Desconto Direto \n",
"1 202513 Guia CF Promoção CF Movimentar Flow Desconto Direto \n",
"2 202513 Guia CF Promoção CF Movimentar Flow Desconto Direto \n",
"3 202513 Guia CF Promoção CF Movimentar Flow Desconto Direto \n",
"4 202513 Guia CF Promoção CF Movimentar Flow Desconto Direto \n",
"\n",
" Promo Período Limitado? EAM Categoria Cód. Combo Código do Item \\\n",
"0 NaN Não PERF. FEMININA NaN 56572 \n",
"1 NaN Não PERF. FEMININA NaN 56572 \n",
"2 NaN Não PERF. FEMININA NaN 56572 \n",
"3 NaN Não PERF. FEMININA NaN 56572 \n",
"4 NaN Não PERF. FEMININA NaN 56572 \n",
"\n",
" ... Preço Promocionado % de Desconto RE compra por RE Vende por \\\n",
"0 ... 174.9 0.255 122.43 174.9 \n",
"1 ... 174.9 0.255 122.43 174.9 \n",
"2 ... 174.9 0.255 122.43 174.9 \n",
"3 ... 174.9 0.255 122.43 174.9 \n",
"4 ... 174.9 0.255 122.43 174.9 \n",
"\n",
" RE lucra (R$) MATCH PDV UF DESCRIÇÃO PDV ANALISTA \n",
"0 52.47 1 20968 SE HIB ITABAIANINHA MARCYARA \n",
"1 52.47 1 20969 AL HIB MARECHAL DEOD HARY \n",
"2 52.47 1 20970 BA ER SAO SEBASTIAO DARLIN \n",
"3 52.47 1 20986 BA HIB OLINDINA LUCAS \n",
"4 52.47 1 20988 BA HIB QUEIMADAS DARLIN \n",
"\n",
"[5 rows x 23 columns]"
]
},
"execution_count": 163,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_tabela.head()"
]
},
{
"cell_type": "code",
"execution_count": 164,
"metadata": {},
"outputs": [],
"source": [
"df_tabela = df_tabela.drop_duplicates()"
]
},
{
"cell_type": "code",
"execution_count": 165,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['Ciclo', 'Veiculo', 'Tipo de Promoção', 'Estratégia de Promoção',\n",
" 'Tipo_mecanica', 'Promo Período Limitado?', 'EAM', 'Categoria',\n",
" 'Cód. Combo', 'Código do Item', 'Descrição do Item',\n",
" 'Chamada Promocional', 'Valor do Guia', 'Preço Promocionado',\n",
" '% de Desconto', 'RE compra por', 'RE Vende por', 'RE lucra (R$)',\n",
" 'MATCH', 'PDV', 'UF', 'DESCRIÇÃO PDV', 'ANALISTA'],\n",
" dtype='object')"
]
},
"execution_count": 165,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_tabela.columns"
]
},
{
"cell_type": "code",
"execution_count": 166,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['pdv', 'SKU', 'SKU_FINAL', 'ESTOQUE ATUAL', 'ESTOQUE EM TRANSITO',\n",
" 'PEDIDO PENDENTE', 'Curva', 'CATEGORIA', 'DiasSemVenda',\n",
" 'nextcycleprojection', 'secondtonextcycleprojection'],\n",
" dtype='object')"
]
},
"execution_count": 166,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.columns"
]
},
{
"cell_type": "code",
"execution_count": 167,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>pdv</th>\n",
" <th>SKU</th>\n",
" <th>SKU_FINAL</th>\n",
" <th>ESTOQUE ATUAL</th>\n",
" <th>ESTOQUE EM TRANSITO</th>\n",
" <th>PEDIDO PENDENTE</th>\n",
" <th>Curva</th>\n",
" <th>CATEGORIA</th>\n",
" <th>DiasSemVenda</th>\n",
" <th>nextcycleprojection</th>\n",
" <th>secondtonextcycleprojection</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>20968</td>\n",
" <td>47814</td>\n",
" <td>47814</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>C</td>\n",
" <td>DESODORANTES</td>\n",
" <td>78</td>\n",
" <td>3</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>20968</td>\n",
" <td>47888</td>\n",
" <td>47888</td>\n",
" <td>11</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>B</td>\n",
" <td>CUIDADOS COM A PELE</td>\n",
" <td>45</td>\n",
" <td>4</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>20968</td>\n",
" <td>49459</td>\n",
" <td>49459</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>C</td>\n",
" <td>MAQUIAGEM</td>\n",
" <td>247</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>20968</td>\n",
" <td>49543</td>\n",
" <td>49543</td>\n",
" <td>8</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>A</td>\n",
" <td>PERFUMARIA</td>\n",
" <td>32</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>20968</td>\n",
" <td>50093</td>\n",
" <td>50093</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>E</td>\n",
" <td>CABELOS</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" pdv SKU SKU_FINAL ESTOQUE ATUAL ESTOQUE EM TRANSITO PEDIDO PENDENTE \\\n",
"0 20968 47814 47814 3 0 0 \n",
"1 20968 47888 47888 11 0 0 \n",
"2 20968 49459 49459 0 0 0 \n",
"3 20968 49543 49543 8 0 0 \n",
"4 20968 50093 50093 0 0 0 \n",
"\n",
" Curva CATEGORIA DiasSemVenda nextcycleprojection \\\n",
"0 C DESODORANTES 78 3 \n",
"1 B CUIDADOS COM A PELE 45 4 \n",
"2 C MAQUIAGEM 247 0 \n",
"3 A PERFUMARIA 32 2 \n",
"4 E CABELOS 0 0 \n",
"\n",
" secondtonextcycleprojection \n",
"0 2 \n",
"1 2 \n",
"2 0 \n",
"3 2 \n",
"4 0 "
]
},
"execution_count": 167,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 168,
"metadata": {},
"outputs": [],
"source": [
"df['pdv'] = df['pdv'].astype(str)"
]
},
{
"cell_type": "code",
"execution_count": 169,
"metadata": {},
"outputs": [],
"source": [
"df['SKU_FINAL'] = df['SKU_FINAL'].astype(str)\n"
]
},
{
"cell_type": "code",
"execution_count": 170,
"metadata": {},
"outputs": [],
"source": [
"df_tabela['Código do Item'] = df_tabela['Código do Item'].astype('str')"
]
},
{
"cell_type": "code",
"execution_count": 171,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['Ciclo', 'Veiculo', 'Tipo de Promoção', 'Estratégia de Promoção',\n",
" 'Tipo_mecanica', 'Promo Período Limitado?', 'EAM', 'Categoria',\n",
" 'Cód. Combo', 'Código do Item', 'Descrição do Item',\n",
" 'Chamada Promocional', 'Valor do Guia', 'Preço Promocionado',\n",
" '% de Desconto', 'RE compra por', 'RE Vende por', 'RE lucra (R$)',\n",
" 'MATCH', 'PDV', 'UF', 'DESCRIÇÃO PDV', 'ANALISTA'],\n",
" dtype='object')"
]
},
"execution_count": 171,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_tabela.columns"
]
},
{
"cell_type": "code",
"execution_count": 172,
"metadata": {},
"outputs": [],
"source": [
"df_tabela['PDV'] = df_tabela['PDV'].astype(str)"
]
},
{
"cell_type": "code",
"execution_count": 173,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>SKU_FINAL</th>\n",
" <th>pdv</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>47814</td>\n",
" <td>20968</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>47888</td>\n",
" <td>20968</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>49459</td>\n",
" <td>20968</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>49543</td>\n",
" <td>20968</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>50093</td>\n",
" <td>20968</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" SKU_FINAL pdv\n",
"0 47814 20968\n",
"1 47888 20968\n",
"2 49459 20968\n",
"3 49543 20968\n",
"4 50093 20968"
]
},
"execution_count": 173,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[['SKU_FINAL','pdv']].head()"
]
},
{
"cell_type": "code",
"execution_count": 276,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>pdv</th>\n",
" <th>SKU</th>\n",
" <th>SKU_FINAL</th>\n",
" <th>ESTOQUE ATUAL</th>\n",
" <th>ESTOQUE EM TRANSITO</th>\n",
" <th>PEDIDO PENDENTE</th>\n",
" <th>Curva</th>\n",
" <th>CATEGORIA</th>\n",
" <th>DiasSemVenda</th>\n",
" <th>nextcycleprojection</th>\n",
" <th>secondtonextcycleprojection</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>711</th>\n",
" <td>20968</td>\n",
" <td>93403</td>\n",
" <td>93403</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>C</td>\n",
" <td>INFANTIL</td>\n",
" <td>18</td>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1857</th>\n",
" <td>20969</td>\n",
" <td>93403</td>\n",
" <td>93403</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>C</td>\n",
" <td>INFANTIL</td>\n",
" <td>53</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5032</th>\n",
" <td>20991</td>\n",
" <td>93403</td>\n",
" <td>93403</td>\n",
" <td>5</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>C</td>\n",
" <td>INFANTIL</td>\n",
" <td>60</td>\n",
" <td>9</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5282</th>\n",
" <td>20992</td>\n",
" <td>93403</td>\n",
" <td>93403</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>E</td>\n",
" <td>INFANTIL</td>\n",
" <td>0</td>\n",
" <td>15</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7541</th>\n",
" <td>20995</td>\n",
" <td>93403</td>\n",
" <td>93403</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>C</td>\n",
" <td>INFANTIL</td>\n",
" <td>4</td>\n",
" <td>5</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8382</th>\n",
" <td>20996</td>\n",
" <td>93403</td>\n",
" <td>93403</td>\n",
" <td>1</td>\n",
" <td>12</td>\n",
" <td>17</td>\n",
" <td>C</td>\n",
" <td>INFANTIL</td>\n",
" <td>3</td>\n",
" <td>10</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10303</th>\n",
" <td>20997</td>\n",
" <td>93403</td>\n",
" <td>93403</td>\n",
" <td>9</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>C</td>\n",
" <td>INFANTIL</td>\n",
" <td>2</td>\n",
" <td>24</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10461</th>\n",
" <td>20998</td>\n",
" <td>93403</td>\n",
" <td>93403</td>\n",
" <td>4</td>\n",
" <td>22</td>\n",
" <td>34</td>\n",
" <td>C</td>\n",
" <td>INFANTIL</td>\n",
" <td>2</td>\n",
" <td>55</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13097</th>\n",
" <td>21278</td>\n",
" <td>93403</td>\n",
" <td>93403</td>\n",
" <td>5</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>C</td>\n",
" <td>INFANTIL</td>\n",
" <td>2</td>\n",
" <td>15</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13702</th>\n",
" <td>21495</td>\n",
" <td>93403</td>\n",
" <td>93403</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>C</td>\n",
" <td>INFANTIL</td>\n",
" <td>111</td>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14577</th>\n",
" <td>22541</td>\n",
" <td>93403</td>\n",
" <td>93403</td>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>C</td>\n",
" <td>INFANTIL</td>\n",
" <td>81</td>\n",
" <td>5</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18488</th>\n",
" <td>24255</td>\n",
" <td>93403</td>\n",
" <td>93403</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>E</td>\n",
" <td>INFANTIL</td>\n",
" <td>0</td>\n",
" <td>15</td>\n",
" <td>3</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" pdv SKU SKU_FINAL ESTOQUE ATUAL ESTOQUE EM TRANSITO \\\n",
"711 20968 93403 93403 1 1 \n",
"1857 20969 93403 93403 0 0 \n",
"5032 20991 93403 93403 5 0 \n",
"5282 20992 93403 93403 0 0 \n",
"7541 20995 93403 93403 0 0 \n",
"8382 20996 93403 93403 1 12 \n",
"10303 20997 93403 93403 9 3 \n",
"10461 20998 93403 93403 4 22 \n",
"13097 21278 93403 93403 5 0 \n",
"13702 21495 93403 93403 2 0 \n",
"14577 22541 93403 93403 0 2 \n",
"18488 24255 93403 93403 1 0 \n",
"\n",
" PEDIDO PENDENTE Curva CATEGORIA DiasSemVenda nextcycleprojection \\\n",
"711 3 C INFANTIL 18 3 \n",
"1857 0 C INFANTIL 53 1 \n",
"5032 0 C INFANTIL 60 9 \n",
"5282 0 E INFANTIL 0 15 \n",
"7541 0 C INFANTIL 4 5 \n",
"8382 17 C INFANTIL 3 10 \n",
"10303 0 C INFANTIL 2 24 \n",
"10461 34 C INFANTIL 2 55 \n",
"13097 0 C INFANTIL 2 15 \n",
"13702 0 C INFANTIL 111 3 \n",
"14577 0 C INFANTIL 81 5 \n",
"18488 0 E INFANTIL 0 15 \n",
"\n",
" secondtonextcycleprojection \n",
"711 1 \n",
"1857 0 \n",
"5032 2 \n",
"5282 3 \n",
"7541 1 \n",
"8382 2 \n",
"10303 5 \n",
"10461 9 \n",
"13097 2 \n",
"13702 1 \n",
"14577 1 \n",
"18488 3 "
]
},
"execution_count": 276,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[(df['SKU_FINAL']=='93403')]"
]
},
{
"cell_type": "code",
"execution_count": 174,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(11606, 34)"
]
},
"execution_count": 174,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_final = pd.merge(left=df,right=df_tabela,right_on=['Código do Item','PDV'],left_on=['SKU_FINAL','pdv'],how='right')\n",
"df_final.shape "
]
},
{
"cell_type": "code",
"execution_count": 175,
"metadata": {},
"outputs": [],
"source": [
"df_final = pd.merge(left=df,right=df_tabela,right_on=['Código do Item','PDV'],left_on=['SKU','pdv'],how='right')"
]
},
{
"cell_type": "code",
"execution_count": 177,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['pdv', 'SKU', 'SKU_FINAL', 'ESTOQUE ATUAL', 'ESTOQUE EM TRANSITO',\n",
" 'PEDIDO PENDENTE', 'Curva', 'CATEGORIA', 'DiasSemVenda',\n",
" 'nextcycleprojection', 'secondtonextcycleprojection', 'Ciclo',\n",
" 'Veiculo', 'Tipo de Promoção', 'Estratégia de Promoção',\n",
" 'Tipo_mecanica', 'Promo Período Limitado?', 'EAM', 'Categoria',\n",
" 'Cód. Combo', 'Código do Item', 'Descrição do Item',\n",
" 'Chamada Promocional', 'Valor do Guia', 'Preço Promocionado',\n",
" '% de Desconto', 'RE compra por', 'RE Vende por', 'RE lucra (R$)',\n",
" 'MATCH', 'PDV', 'UF', 'DESCRIÇÃO PDV', 'ANALISTA'],\n",
" dtype='object')"
]
},
"execution_count": 177,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_final.columns"
]
},
{
"cell_type": "code",
"execution_count": 178,
"metadata": {},
"outputs": [],
"source": [
"df_final['pdv'] = df_final['PDV']\n",
"df_final['SKU_FINAL'] = df_final['Código do Item']"
]
},
{
"cell_type": "code",
"execution_count": 179,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 EUDORA EAU DE PARFUM ROSÉ V2, 75 ml\n",
"1 EUDORA EAU DE PARFUM ROSÉ V2, 75 ml\n",
"2 EUDORA EAU DE PARFUM ROSÉ V2, 75 ml\n",
"3 EUDORA EAU DE PARFUM ROSÉ V2, 75 ml\n",
"4 EUDORA EAU DE PARFUM ROSÉ V2, 75 ml\n",
" ... \n",
"10651 SIÀGE ELIXIR CAPILAR TRATAMENTO OVERNIGHT NUTR...\n",
"10652 SIÀGE ELIXIR CAPILAR TRATAMENTO OVERNIGHT NUTR...\n",
"10653 SIÀGE ELIXIR CAPILAR TRATAMENTO OVERNIGHT NUTR...\n",
"10654 SIÀGE ELIXIR CAPILAR TRATAMENTO OVERNIGHT NUTR...\n",
"10655 SIÀGE ELIXIR CAPILAR TRATAMENTO OVERNIGHT NUTR...\n",
"Name: Descrição do Item, Length: 10656, dtype: object"
]
},
"execution_count": 179,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_final['Descrição do Item']"
]
},
{
"cell_type": "code",
"execution_count": 180,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>pdv</th>\n",
" <th>SKU</th>\n",
" <th>SKU_FINAL</th>\n",
" <th>ESTOQUE ATUAL</th>\n",
" <th>ESTOQUE EM TRANSITO</th>\n",
" <th>PEDIDO PENDENTE</th>\n",
" <th>Curva</th>\n",
" <th>CATEGORIA</th>\n",
" <th>DiasSemVenda</th>\n",
" <th>nextcycleprojection</th>\n",
" <th>...</th>\n",
" <th>Preço Promocionado</th>\n",
" <th>% de Desconto</th>\n",
" <th>RE compra por</th>\n",
" <th>RE Vende por</th>\n",
" <th>RE lucra (R$)</th>\n",
" <th>MATCH</th>\n",
" <th>PDV</th>\n",
" <th>UF</th>\n",
" <th>DESCRIÇÃO PDV</th>\n",
" <th>ANALISTA</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>20968</td>\n",
" <td>56572</td>\n",
" <td>56572</td>\n",
" <td>35</td>\n",
" <td>0</td>\n",
" <td>None</td>\n",
" <td>B</td>\n",
" <td>PERFUMARIA</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>174.9</td>\n",
" <td>0.255</td>\n",
" <td>122.43</td>\n",
" <td>174.9</td>\n",
" <td>52.47</td>\n",
" <td>1</td>\n",
" <td>20968</td>\n",
" <td>SE</td>\n",
" <td>HIB ITABAIANINHA</td>\n",
" <td>MARCYARA</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>20969</td>\n",
" <td>56572</td>\n",
" <td>56572</td>\n",
" <td>30</td>\n",
" <td>0</td>\n",
" <td>None</td>\n",
" <td>B</td>\n",
" <td>PERFUMARIA</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>174.9</td>\n",
" <td>0.255</td>\n",
" <td>122.43</td>\n",
" <td>174.9</td>\n",
" <td>52.47</td>\n",
" <td>1</td>\n",
" <td>20969</td>\n",
" <td>AL</td>\n",
" <td>HIB MARECHAL DEOD</td>\n",
" <td>HARY</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>20970</td>\n",
" <td>56572</td>\n",
" <td>56572</td>\n",
" <td>81</td>\n",
" <td>0</td>\n",
" <td>None</td>\n",
" <td>E</td>\n",
" <td>PERFUMARIA</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>174.9</td>\n",
" <td>0.255</td>\n",
" <td>122.43</td>\n",
" <td>174.9</td>\n",
" <td>52.47</td>\n",
" <td>1</td>\n",
" <td>20970</td>\n",
" <td>BA</td>\n",
" <td>ER SAO SEBASTIAO</td>\n",
" <td>DARLIN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>20986</td>\n",
" <td>56572</td>\n",
" <td>56572</td>\n",
" <td>71</td>\n",
" <td>0</td>\n",
" <td>None</td>\n",
" <td>E</td>\n",
" <td>PERFUMARIA</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>174.9</td>\n",
" <td>0.255</td>\n",
" <td>122.43</td>\n",
" <td>174.9</td>\n",
" <td>52.47</td>\n",
" <td>1</td>\n",
" <td>20986</td>\n",
" <td>BA</td>\n",
" <td>HIB OLINDINA</td>\n",
" <td>LUCAS</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>20988</td>\n",
" <td>56572</td>\n",
" <td>56572</td>\n",
" <td>51</td>\n",
" <td>0</td>\n",
" <td>None</td>\n",
" <td>E</td>\n",
" <td>PERFUMARIA</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>174.9</td>\n",
" <td>0.255</td>\n",
" <td>122.43</td>\n",
" <td>174.9</td>\n",
" <td>52.47</td>\n",
" <td>1</td>\n",
" <td>20988</td>\n",
" <td>BA</td>\n",
" <td>HIB QUEIMADAS</td>\n",
" <td>DARLIN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>20989</td>\n",
" <td>56572</td>\n",
" <td>56572</td>\n",
" <td>95</td>\n",
" <td>0</td>\n",
" <td>None</td>\n",
" <td>E</td>\n",
" <td>PERFUMARIA</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>174.9</td>\n",
" <td>0.255</td>\n",
" <td>122.43</td>\n",
" <td>174.9</td>\n",
" <td>52.47</td>\n",
" <td>1</td>\n",
" <td>20989</td>\n",
" <td>BA</td>\n",
" <td>HIB ENTRE RIOS</td>\n",
" <td>MARCYARA</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>20991</td>\n",
" <td>56572</td>\n",
" <td>56572</td>\n",
" <td>35</td>\n",
" <td>0</td>\n",
" <td>None</td>\n",
" <td>B</td>\n",
" <td>PERFUMARIA</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>174.9</td>\n",
" <td>0.255</td>\n",
" <td>122.43</td>\n",
" <td>174.9</td>\n",
" <td>52.47</td>\n",
" <td>1</td>\n",
" <td>20991</td>\n",
" <td>AL</td>\n",
" <td>HIB CAMPO ALEGRE</td>\n",
" <td>HARY</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>20992</td>\n",
" <td>56572</td>\n",
" <td>56572</td>\n",
" <td>149</td>\n",
" <td>0</td>\n",
" <td>None</td>\n",
" <td>E</td>\n",
" <td>PERFUMARIA</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>174.9</td>\n",
" <td>0.255</td>\n",
" <td>122.43</td>\n",
" <td>174.9</td>\n",
" <td>52.47</td>\n",
" <td>1</td>\n",
" <td>20992</td>\n",
" <td>BA</td>\n",
" <td>ER CONC COITE</td>\n",
" <td>JEFFERSON</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>20993</td>\n",
" <td>56572</td>\n",
" <td>56572</td>\n",
" <td>0</td>\n",
" <td>291</td>\n",
" <td>None</td>\n",
" <td>E</td>\n",
" <td>PERFUMARIA</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>174.9</td>\n",
" <td>0.255</td>\n",
" <td>122.43</td>\n",
" <td>174.9</td>\n",
" <td>52.47</td>\n",
" <td>1</td>\n",
" <td>20993</td>\n",
" <td>BA</td>\n",
" <td>ER CANDEIAS</td>\n",
" <td>DARLIN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>20994</td>\n",
" <td>56572</td>\n",
" <td>56572</td>\n",
" <td>218</td>\n",
" <td>0</td>\n",
" <td>None</td>\n",
" <td>E</td>\n",
" <td>PERFUMARIA</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>174.9</td>\n",
" <td>0.255</td>\n",
" <td>122.43</td>\n",
" <td>174.9</td>\n",
" <td>52.47</td>\n",
" <td>1</td>\n",
" <td>20994</td>\n",
" <td>BA</td>\n",
" <td>ER SIMOES FILHO</td>\n",
" <td>LUCAS</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>20995</td>\n",
" <td>56572</td>\n",
" <td>56572</td>\n",
" <td>55</td>\n",
" <td>0</td>\n",
" <td>None</td>\n",
" <td>B</td>\n",
" <td>PERFUMARIA</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>174.9</td>\n",
" <td>0.255</td>\n",
" <td>122.43</td>\n",
" <td>174.9</td>\n",
" <td>52.47</td>\n",
" <td>1</td>\n",
" <td>20995</td>\n",
" <td>SE</td>\n",
" <td>ER LAGARTO</td>\n",
" <td>MARCYARA</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>20996</td>\n",
" <td>56572</td>\n",
" <td>56572</td>\n",
" <td>69</td>\n",
" <td>0</td>\n",
" <td>None</td>\n",
" <td>B</td>\n",
" <td>PERFUMARIA</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>174.9</td>\n",
" <td>0.255</td>\n",
" <td>122.43</td>\n",
" <td>174.9</td>\n",
" <td>52.47</td>\n",
" <td>1</td>\n",
" <td>20996</td>\n",
" <td>AL</td>\n",
" <td>ER ANTARES</td>\n",
" <td>LAIS</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>20997</td>\n",
" <td>56572</td>\n",
" <td>56572</td>\n",
" <td>231</td>\n",
" <td>0</td>\n",
" <td>None</td>\n",
" <td>B</td>\n",
" <td>PERFUMARIA</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>174.9</td>\n",
" <td>0.255</td>\n",
" <td>122.43</td>\n",
" <td>174.9</td>\n",
" <td>52.47</td>\n",
" <td>1</td>\n",
" <td>20997</td>\n",
" <td>AL</td>\n",
" <td>ER PITANGUINHA</td>\n",
" <td>LAIS</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>20998</td>\n",
" <td>56572</td>\n",
" <td>56572</td>\n",
" <td>212</td>\n",
" <td>0</td>\n",
" <td>None</td>\n",
" <td>B</td>\n",
" <td>PERFUMARIA</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>174.9</td>\n",
" <td>0.255</td>\n",
" <td>122.43</td>\n",
" <td>174.9</td>\n",
" <td>52.47</td>\n",
" <td>1</td>\n",
" <td>20998</td>\n",
" <td>AL</td>\n",
" <td>CD SERRARIA</td>\n",
" <td>VA</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>20999</td>\n",
" <td>56572</td>\n",
" <td>56572</td>\n",
" <td>127</td>\n",
" <td>0</td>\n",
" <td>None</td>\n",
" <td>E</td>\n",
" <td>PERFUMARIA</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>174.9</td>\n",
" <td>0.255</td>\n",
" <td>122.43</td>\n",
" <td>174.9</td>\n",
" <td>52.47</td>\n",
" <td>1</td>\n",
" <td>20999</td>\n",
" <td>BA</td>\n",
" <td>HIB ESPLANADA</td>\n",
" <td>MARCYARA</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>21000</td>\n",
" <td>56572</td>\n",
" <td>56572</td>\n",
" <td>57</td>\n",
" <td>0</td>\n",
" <td>None</td>\n",
" <td>E</td>\n",
" <td>PERFUMARIA</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>174.9</td>\n",
" <td>0.255</td>\n",
" <td>122.43</td>\n",
" <td>174.9</td>\n",
" <td>52.47</td>\n",
" <td>1</td>\n",
" <td>21000</td>\n",
" <td>BA</td>\n",
" <td>HIB SANTALUZ</td>\n",
" <td>DARLIN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>21001</td>\n",
" <td>56572</td>\n",
" <td>56572</td>\n",
" <td>70</td>\n",
" <td>0</td>\n",
" <td>None</td>\n",
" <td>E</td>\n",
" <td>PERFUMARIA</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>174.9</td>\n",
" <td>0.255</td>\n",
" <td>122.43</td>\n",
" <td>174.9</td>\n",
" <td>52.47</td>\n",
" <td>1</td>\n",
" <td>21001</td>\n",
" <td>BA</td>\n",
" <td>HIB RIO REAL</td>\n",
" <td>LUCAS</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>21278</td>\n",
" <td>56572</td>\n",
" <td>56572</td>\n",
" <td>81</td>\n",
" <td>0</td>\n",
" <td>None</td>\n",
" <td>B</td>\n",
" <td>PERFUMARIA</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>174.9</td>\n",
" <td>0.255</td>\n",
" <td>122.43</td>\n",
" <td>174.9</td>\n",
" <td>52.47</td>\n",
" <td>1</td>\n",
" <td>21278</td>\n",
" <td>SE</td>\n",
" <td>VD SOCORRO</td>\n",
" <td>JEFFERSON</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>21375</td>\n",
" <td>56572</td>\n",
" <td>56572</td>\n",
" <td>107</td>\n",
" <td>0</td>\n",
" <td>None</td>\n",
" <td>E</td>\n",
" <td>PERFUMARIA</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>174.9</td>\n",
" <td>0.255</td>\n",
" <td>122.43</td>\n",
" <td>174.9</td>\n",
" <td>52.47</td>\n",
" <td>1</td>\n",
" <td>21375</td>\n",
" <td>BA</td>\n",
" <td>IPIRA HB</td>\n",
" <td>DARLIN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>21383</td>\n",
" <td>56572</td>\n",
" <td>56572</td>\n",
" <td>95</td>\n",
" <td>0</td>\n",
" <td>None</td>\n",
" <td>E</td>\n",
" <td>PERFUMARIA</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>174.9</td>\n",
" <td>0.255</td>\n",
" <td>122.43</td>\n",
" <td>174.9</td>\n",
" <td>52.47</td>\n",
" <td>1</td>\n",
" <td>21383</td>\n",
" <td>BA</td>\n",
" <td>CAPIM GROSSO ER</td>\n",
" <td>DARLIN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>20 rows × 34 columns</p>\n",
"</div>"
],
"text/plain": [
" pdv SKU SKU_FINAL ESTOQUE ATUAL ESTOQUE EM TRANSITO PEDIDO PENDENTE \\\n",
"0 20968 56572 56572 35 0 None \n",
"1 20969 56572 56572 30 0 None \n",
"2 20970 56572 56572 81 0 None \n",
"3 20986 56572 56572 71 0 None \n",
"4 20988 56572 56572 51 0 None \n",
"5 20989 56572 56572 95 0 None \n",
"6 20991 56572 56572 35 0 None \n",
"7 20992 56572 56572 149 0 None \n",
"8 20993 56572 56572 0 291 None \n",
"9 20994 56572 56572 218 0 None \n",
"10 20995 56572 56572 55 0 None \n",
"11 20996 56572 56572 69 0 None \n",
"12 20997 56572 56572 231 0 None \n",
"13 20998 56572 56572 212 0 None \n",
"14 20999 56572 56572 127 0 None \n",
"15 21000 56572 56572 57 0 None \n",
"16 21001 56572 56572 70 0 None \n",
"17 21278 56572 56572 81 0 None \n",
"18 21375 56572 56572 107 0 None \n",
"19 21383 56572 56572 95 0 None \n",
"\n",
" Curva CATEGORIA DiasSemVenda nextcycleprojection ... \\\n",
"0 B PERFUMARIA 0.0 0.0 ... \n",
"1 B PERFUMARIA 0.0 0.0 ... \n",
"2 E PERFUMARIA 0.0 0.0 ... \n",
"3 E PERFUMARIA 0.0 0.0 ... \n",
"4 E PERFUMARIA 0.0 0.0 ... \n",
"5 E PERFUMARIA 0.0 0.0 ... \n",
"6 B PERFUMARIA 0.0 0.0 ... \n",
"7 E PERFUMARIA 0.0 0.0 ... \n",
"8 E PERFUMARIA 0.0 0.0 ... \n",
"9 E PERFUMARIA 0.0 0.0 ... \n",
"10 B PERFUMARIA 0.0 0.0 ... \n",
"11 B PERFUMARIA 0.0 0.0 ... \n",
"12 B PERFUMARIA 0.0 0.0 ... \n",
"13 B PERFUMARIA 0.0 0.0 ... \n",
"14 E PERFUMARIA 0.0 0.0 ... \n",
"15 E PERFUMARIA 0.0 0.0 ... \n",
"16 E PERFUMARIA 0.0 0.0 ... \n",
"17 B PERFUMARIA 0.0 0.0 ... \n",
"18 E PERFUMARIA 0.0 0.0 ... \n",
"19 E PERFUMARIA 0.0 0.0 ... \n",
"\n",
" Preço Promocionado % de Desconto RE compra por RE Vende por \\\n",
"0 174.9 0.255 122.43 174.9 \n",
"1 174.9 0.255 122.43 174.9 \n",
"2 174.9 0.255 122.43 174.9 \n",
"3 174.9 0.255 122.43 174.9 \n",
"4 174.9 0.255 122.43 174.9 \n",
"5 174.9 0.255 122.43 174.9 \n",
"6 174.9 0.255 122.43 174.9 \n",
"7 174.9 0.255 122.43 174.9 \n",
"8 174.9 0.255 122.43 174.9 \n",
"9 174.9 0.255 122.43 174.9 \n",
"10 174.9 0.255 122.43 174.9 \n",
"11 174.9 0.255 122.43 174.9 \n",
"12 174.9 0.255 122.43 174.9 \n",
"13 174.9 0.255 122.43 174.9 \n",
"14 174.9 0.255 122.43 174.9 \n",
"15 174.9 0.255 122.43 174.9 \n",
"16 174.9 0.255 122.43 174.9 \n",
"17 174.9 0.255 122.43 174.9 \n",
"18 174.9 0.255 122.43 174.9 \n",
"19 174.9 0.255 122.43 174.9 \n",
"\n",
" RE lucra (R$) MATCH PDV UF DESCRIÇÃO PDV ANALISTA \n",
"0 52.47 1 20968 SE HIB ITABAIANINHA MARCYARA \n",
"1 52.47 1 20969 AL HIB MARECHAL DEOD HARY \n",
"2 52.47 1 20970 BA ER SAO SEBASTIAO DARLIN \n",
"3 52.47 1 20986 BA HIB OLINDINA LUCAS \n",
"4 52.47 1 20988 BA HIB QUEIMADAS DARLIN \n",
"5 52.47 1 20989 BA HIB ENTRE RIOS MARCYARA \n",
"6 52.47 1 20991 AL HIB CAMPO ALEGRE HARY \n",
"7 52.47 1 20992 BA ER CONC COITE JEFFERSON \n",
"8 52.47 1 20993 BA ER CANDEIAS DARLIN \n",
"9 52.47 1 20994 BA ER SIMOES FILHO LUCAS \n",
"10 52.47 1 20995 SE ER LAGARTO MARCYARA \n",
"11 52.47 1 20996 AL ER ANTARES LAIS \n",
"12 52.47 1 20997 AL ER PITANGUINHA LAIS \n",
"13 52.47 1 20998 AL CD SERRARIA VA \n",
"14 52.47 1 20999 BA HIB ESPLANADA MARCYARA \n",
"15 52.47 1 21000 BA HIB SANTALUZ DARLIN \n",
"16 52.47 1 21001 BA HIB RIO REAL LUCAS \n",
"17 52.47 1 21278 SE VD SOCORRO JEFFERSON \n",
"18 52.47 1 21375 BA IPIRA HB DARLIN \n",
"19 52.47 1 21383 BA CAPIM GROSSO ER DARLIN \n",
"\n",
"[20 rows x 34 columns]"
]
},
"execution_count": 180,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_final.head(20)"
]
},
{
"cell_type": "code",
"execution_count": 181,
"metadata": {},
"outputs": [],
"source": [
"df_final['match'] = 1"
]
},
{
"cell_type": "code",
"execution_count": 182,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(10656, 40)"
]
},
"execution_count": 182,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_final = pd.merge(left=df_final, right=filtered_calendario[['Ciclo','INICIO CICLO','FIM CICLO','DURAÇÃO','match','dias_ate_inicio']], on='match',how='inner')\n",
"df_final.shape"
]
},
{
"cell_type": "code",
"execution_count": 183,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"PDV\n",
"20968 333\n",
"20969 333\n",
"20970 333\n",
"20986 333\n",
"20988 333\n",
"20989 333\n",
"20991 333\n",
"20992 333\n",
"20993 333\n",
"20994 333\n",
"20995 333\n",
"20996 333\n",
"20997 333\n",
"20998 333\n",
"20999 333\n",
"21000 333\n",
"21001 333\n",
"21278 333\n",
"21375 333\n",
"21383 333\n",
"21495 333\n",
"22448 333\n",
"22541 333\n",
"23703 333\n",
"23704 333\n",
"23711 333\n",
"23712 333\n",
"24255 333\n",
"24257 333\n",
"24269 333\n",
"24293 333\n",
"23813 333\n",
"Name: count, dtype: int64"
]
},
"execution_count": 183,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_final.PDV.value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 184,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(10656, 40)"
]
},
"execution_count": 184,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#df_final = pd.merge(left=df_final,right=df_pdv[['PDV', 'CANAL', 'DESCRIÇÃO PDV', 'PDV DESC','UF', 'MARCA', 'ANALISTA']],on = 'PDV',how='inner')\n",
"df_final.shape"
]
},
{
"cell_type": "code",
"execution_count": 185,
"metadata": {},
"outputs": [],
"source": [
"#df_final['SKU'] = df_final['SKU'].astype(str) \n",
"#df_final['PDV'] = df_final['PDV'].astype(str) \n",
"#df_final = pd.merge(left=df_final,right=df_estoque[['SKU_FINAL', 'DDV PREVISTO', 'COBERTURA ATUAL','PDV']],right_on=['PDV','SKU_FINAL'],left_on=['PDV','SKU'],how='left')\n",
"#df_final.shape"
]
},
{
"cell_type": "code",
"execution_count": 186,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"\"df_bi_preco['SKU2'] = df_bi_preco['SKU2'].astype(str).str.replace('.0','',regex=False) \\n\\ndf_final = pd.merge(left=df_final,right=df_bi_preco[['SKU2', 'UF','Tipo Preço', 'PC', 'PV']],right_on=['UF','SKU2'],left_on=['UF','SKU_FINAL'],how='left')\\ndf_final.shape \""
]
},
"execution_count": 186,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\n",
"r'''df_bi_preco['SKU2'] = df_bi_preco['SKU2'].astype(str).str.replace('.0','',regex=False) \n",
"\n",
"df_final = pd.merge(left=df_final,right=df_bi_preco[['SKU2', 'UF','Tipo Preço', 'PC', 'PV']],right_on=['UF','SKU2'],left_on=['UF','SKU_FINAL'],how='left')\n",
"df_final.shape ''' "
]
},
{
"cell_type": "code",
"execution_count": 187,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"pdv\n",
"20968 333\n",
"20969 333\n",
"20970 333\n",
"20986 333\n",
"20988 333\n",
"20989 333\n",
"20991 333\n",
"20992 333\n",
"20993 333\n",
"20994 333\n",
"20995 333\n",
"20996 333\n",
"20997 333\n",
"20998 333\n",
"20999 333\n",
"21000 333\n",
"21001 333\n",
"21278 333\n",
"21375 333\n",
"21383 333\n",
"21495 333\n",
"22448 333\n",
"22541 333\n",
"23703 333\n",
"23704 333\n",
"23711 333\n",
"23712 333\n",
"24255 333\n",
"24257 333\n",
"24269 333\n",
"24293 333\n",
"23813 333\n",
"Name: count, dtype: int64"
]
},
"execution_count": 187,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_final['pdv'].value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 188,
"metadata": {},
"outputs": [],
"source": [
"#df_bi_preco['SKU1'] = df_bi_preco['SKU1'].astype(str).str.replace('.0','',regex=False) \n",
"\n",
"#df_final = pd.merge(left=df_final,right=df_bi_preco[['SKU1', 'SKU2', 'UF', 'PC', 'PV']],right_on=['UF','SKU1'],left_on=['UF','SKU'],how='left')\n",
"#df_final.shape "
]
},
{
"cell_type": "code",
"execution_count": 189,
"metadata": {},
"outputs": [],
"source": [
"#df_bi_preco = df_bi_preco[df_bi_preco['MARCA']=='EUDORA']"
]
},
{
"cell_type": "code",
"execution_count": 190,
"metadata": {},
"outputs": [],
"source": [
"#df_final['PRECO DE COMPRA'] = np.where(~df_final['PC_x'].isna(),df_final['PC_x'],df_final['PC_y'])\n",
"\n",
"#df_final['PRECO DE VENDA'] = np.where(~df_final['PV_x'].isna(),df_final['PV_x'],df_final['PV_y'])\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 191,
"metadata": {},
"outputs": [],
"source": [
"#df_estoque = df_estoque.rename(columns={'SKU_FINAL':'SKU_PARA_VALIDACAO'})\n",
"#df_final = pd.merge( left= df_final, right = df_estoque[['SKU_PARA_VALIDACAO','Arquivo_Origem']], left_on= 'SKU', right_on='SKU_PARA_VALIDACAO', how='left')"
]
},
{
"cell_type": "code",
"execution_count": 192,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['pdv', 'SKU', 'SKU_FINAL', 'ESTOQUE ATUAL', 'ESTOQUE EM TRANSITO',\n",
" 'PEDIDO PENDENTE', 'Curva', 'CATEGORIA', 'DiasSemVenda',\n",
" 'nextcycleprojection', 'secondtonextcycleprojection', 'Ciclo_x',\n",
" 'Veiculo', 'Tipo de Promoção', 'Estratégia de Promoção',\n",
" 'Tipo_mecanica', 'Promo Período Limitado?', 'EAM', 'Categoria',\n",
" 'Cód. Combo', 'Código do Item', 'Descrição do Item',\n",
" 'Chamada Promocional', 'Valor do Guia', 'Preço Promocionado',\n",
" '% de Desconto', 'RE compra por', 'RE Vende por', 'RE lucra (R$)',\n",
" 'MATCH', 'PDV', 'UF', 'DESCRIÇÃO PDV', 'ANALISTA', 'match', 'Ciclo_y',\n",
" 'INICIO CICLO', 'FIM CICLO', 'DURAÇÃO', 'dias_ate_inicio'],\n",
" dtype='object')"
]
},
"execution_count": 192,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_final.columns"
]
},
{
"cell_type": "code",
"execution_count": 193,
"metadata": {},
"outputs": [],
"source": [
"#df_final = df_final.drop(columns=['Desativação','Lançamento','Promoção Próximo Ciclo','Compra inteligente semanal/Sugestão de compra','Planograma','Carteira Bloqueada Para Novos Pedidos','Preço Sell In','Quantidade','Item analisado','Promoção Próximo Ciclo + 1','SKU_PARA_VALIDACAO','Ciclo_y'])"
]
},
{
"cell_type": "code",
"execution_count": 194,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(10656, 42)"
]
},
"execution_count": 194,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_final['PDV_SKU'] = df_final['PDV'].astype(str) + df_final['SKU_FINAL'].astype(str) \n",
"df_final['UFPRODUTO'] = df_final['UF'].astype(str) + df_final['SKU_FINAL'].astype(str)\n",
"\n",
"df_final.shape"
]
},
{
"cell_type": "code",
"execution_count": 195,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 20968\n",
"1 20969\n",
"2 20970\n",
"3 20986\n",
"4 20988\n",
" ... \n",
"10651 24255\n",
"10652 24257\n",
"10653 24269\n",
"10654 24293\n",
"10655 23813\n",
"Name: PDV, Length: 10656, dtype: object"
]
},
"execution_count": 195,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_final['PDV']"
]
},
{
"cell_type": "code",
"execution_count": 196,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"secondtonextcycleprojection\n",
"0.0 1603\n",
"1.0 1102\n",
"2.0 738\n",
"4.0 566\n",
"3.0 478\n",
" ... \n",
"368.0 1\n",
"141.0 1\n",
"105.0 1\n",
"310.0 1\n",
"231.0 1\n",
"Name: count, Length: 145, dtype: int64"
]
},
"execution_count": 196,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_final['nextcycleprojection'].value_counts()\n",
"\n",
"df_final['secondtonextcycleprojection'].value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 197,
"metadata": {},
"outputs": [],
"source": [
"#df_final['PROJEÇÃO DO CICLO PROMOCIONADO'] =df_final['Projeção Próximo Ciclo + 1'] - df_final['Projeção Próximo Ciclo'] # projeção do ciclo em estudo"
]
},
{
"cell_type": "code",
"execution_count": 198,
"metadata": {},
"outputs": [],
"source": [
"#df_final['PROJEÇÃO DO CICLO PROMOCIONADO'].value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 199,
"metadata": {},
"outputs": [],
"source": [
"#df_final['Data Prevista Regularização'] = df_final['Data Prevista Regularização'].astype(str).replace('0','REGULAR')"
]
},
{
"cell_type": "code",
"execution_count": 200,
"metadata": {},
"outputs": [],
"source": [
"df_final = df_final.rename(columns={'Arquivo_Origem': 'MARCA'})"
]
},
{
"cell_type": "code",
"execution_count": 201,
"metadata": {},
"outputs": [],
"source": [
"#df_final = df_final[~df_final['MARCA'].isna()]\n",
"#df_final['MARCA'].isna().sum()"
]
},
{
"cell_type": "code",
"execution_count": 202,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(10656, 42)"
]
},
"execution_count": 202,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_final = df_final.drop_duplicates()\n",
"df_final.shape"
]
},
{
"cell_type": "code",
"execution_count": 203,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['pdv', 'SKU', 'SKU_FINAL', 'ESTOQUE ATUAL', 'ESTOQUE EM TRANSITO',\n",
" 'PEDIDO PENDENTE', 'Curva', 'CATEGORIA', 'DiasSemVenda',\n",
" 'nextcycleprojection', 'secondtonextcycleprojection', 'Ciclo_x',\n",
" 'Veiculo', 'Tipo de Promoção', 'Estratégia de Promoção',\n",
" 'Tipo_mecanica', 'Promo Período Limitado?', 'EAM', 'Categoria',\n",
" 'Cód. Combo', 'Código do Item', 'Descrição do Item',\n",
" 'Chamada Promocional', 'Valor do Guia', 'Preço Promocionado',\n",
" '% de Desconto', 'RE compra por', 'RE Vende por', 'RE lucra (R$)',\n",
" 'MATCH', 'PDV', 'UF', 'DESCRIÇÃO PDV', 'ANALISTA', 'match', 'Ciclo_y',\n",
" 'INICIO CICLO', 'FIM CICLO', 'DURAÇÃO', 'dias_ate_inicio', 'PDV_SKU',\n",
" 'UFPRODUTO'],\n",
" dtype='object')"
]
},
"execution_count": 203,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_final.columns"
]
},
{
"cell_type": "code",
"execution_count": 204,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['PDV', 'SKU', 'DESCRICAO', 'C202411', 'C202412', 'C202413', 'C202414',\n",
" 'C202415', 'C202416', 'C202417', 'C202501', 'C202502', 'C202503',\n",
" 'C202504', 'C202505', 'C202506', 'C202507', 'C202508', 'C202509',\n",
" 'C202510', 'C202511', 'C202512'],\n",
" dtype='object')"
]
},
"execution_count": 204,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_vendas['PDV'] = df_vendas['PDV'].astype(str)\n",
"df_vendas['SKU'] = df_vendas['SKU'].astype(str)\n",
"\n",
"df_vendas.columns"
]
},
{
"cell_type": "code",
"execution_count": 205,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(10656, 42)"
]
},
"execution_count": 205,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_final.shape"
]
},
{
"cell_type": "code",
"execution_count": 206,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>PDV</th>\n",
" <th>SKU</th>\n",
" <th>DESCRICAO</th>\n",
" <th>C202411</th>\n",
" <th>C202412</th>\n",
" <th>C202413</th>\n",
" <th>C202414</th>\n",
" <th>C202415</th>\n",
" <th>C202416</th>\n",
" <th>C202417</th>\n",
" <th>...</th>\n",
" <th>C202503</th>\n",
" <th>C202504</th>\n",
" <th>C202505</th>\n",
" <th>C202506</th>\n",
" <th>C202507</th>\n",
" <th>C202508</th>\n",
" <th>C202509</th>\n",
" <th>C202510</th>\n",
" <th>C202511</th>\n",
" <th>C202512</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>11201</td>\n",
" <td>1004</td>\n",
" <td>FLORATTA DES COL MY BLUE 75ml</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>11201</td>\n",
" <td>1005</td>\n",
" <td>DEM FLORATTA DES COL MY BLUE 4ml</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>11201</td>\n",
" <td>1078</td>\n",
" <td>MATCH SRUM CAP POS QUIMICA 50ml</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>11201</td>\n",
" <td>1296</td>\n",
" <td>PMPCK THE BLEND DES ANTIT AER 2x75g</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>11201</td>\n",
" <td>1302</td>\n",
" <td>PMPCK LILY DES ANTIT AER 2x75g</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 22 columns</p>\n",
"</div>"
],
"text/plain": [
" PDV SKU DESCRICAO C202411 C202412 \\\n",
"0 11201 1004 FLORATTA DES COL MY BLUE 75ml 0.0 0.0 \n",
"1 11201 1005 DEM FLORATTA DES COL MY BLUE 4ml 0.0 0.0 \n",
"2 11201 1078 MATCH SRUM CAP POS QUIMICA 50ml 0.0 0.0 \n",
"3 11201 1296 PMPCK THE BLEND DES ANTIT AER 2x75g 0.0 0.0 \n",
"4 11201 1302 PMPCK LILY DES ANTIT AER 2x75g 0.0 0.0 \n",
"\n",
" C202413 C202414 C202415 C202416 C202417 ... C202503 C202504 \\\n",
"0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 \n",
"1 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 \n",
"2 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 \n",
"3 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 \n",
"4 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 \n",
"\n",
" C202505 C202506 C202507 C202508 C202509 C202510 C202511 C202512 \n",
"0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n",
"1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n",
"2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n",
"3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n",
"4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n",
"\n",
"[5 rows x 22 columns]"
]
},
"execution_count": 206,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_vendas.head()"
]
},
{
"cell_type": "code",
"execution_count": 207,
"metadata": {},
"outputs": [],
"source": [
"df_final = pd.merge(df_final,df_vendas,left_on=['PDV','SKU'],right_on=['PDV','SKU'],how='left')"
]
},
{
"cell_type": "code",
"execution_count": 208,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['pdv', 'SKU', 'SKU_FINAL', 'ESTOQUE ATUAL', 'ESTOQUE EM TRANSITO',\n",
" 'PEDIDO PENDENTE', 'Curva', 'CATEGORIA', 'DiasSemVenda',\n",
" 'nextcycleprojection', 'secondtonextcycleprojection', 'Ciclo_x',\n",
" 'Veiculo', 'Tipo de Promoção', 'Estratégia de Promoção',\n",
" 'Tipo_mecanica', 'Promo Período Limitado?', 'EAM', 'Categoria',\n",
" 'Cód. Combo', 'Código do Item', 'Descrição do Item',\n",
" 'Chamada Promocional', 'Valor do Guia', 'Preço Promocionado',\n",
" '% de Desconto', 'RE compra por', 'RE Vende por', 'RE lucra (R$)',\n",
" 'MATCH', 'PDV', 'UF', 'DESCRIÇÃO PDV', 'ANALISTA', 'match', 'Ciclo_y',\n",
" 'INICIO CICLO', 'FIM CICLO', 'DURAÇÃO', 'dias_ate_inicio', 'PDV_SKU',\n",
" 'UFPRODUTO', 'DESCRICAO', 'C202411', 'C202412', 'C202413', 'C202414',\n",
" 'C202415', 'C202416', 'C202417', 'C202501', 'C202502', 'C202503',\n",
" 'C202504', 'C202505', 'C202506', 'C202507', 'C202508', 'C202509',\n",
" 'C202510', 'C202511', 'C202512'],\n",
" dtype='object')"
]
},
"execution_count": 208,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_final.columns"
]
},
{
"cell_type": "code",
"execution_count": 209,
"metadata": {},
"outputs": [],
"source": [
"df_final.iloc[:, -18:-1] = df_final.iloc[:, -18:-1].fillna(0)"
]
},
{
"cell_type": "code",
"execution_count": 210,
"metadata": {},
"outputs": [],
"source": [
"# Define list of target columns\n",
"sales_2024_cols = df_final.columns[-18:-1]\n",
"# Create a new column with the row-wise max\n",
"df_final['PICO DE VENDAS 17CICLOS'] = df_final[sales_2024_cols].max(axis=1)\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 211,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>pdv</th>\n",
" <th>SKU</th>\n",
" <th>SKU_FINAL</th>\n",
" <th>ESTOQUE ATUAL</th>\n",
" <th>ESTOQUE EM TRANSITO</th>\n",
" <th>PEDIDO PENDENTE</th>\n",
" <th>Curva</th>\n",
" <th>CATEGORIA</th>\n",
" <th>DiasSemVenda</th>\n",
" <th>nextcycleprojection</th>\n",
" <th>...</th>\n",
" <th>C202504</th>\n",
" <th>C202505</th>\n",
" <th>C202506</th>\n",
" <th>C202507</th>\n",
" <th>C202508</th>\n",
" <th>C202509</th>\n",
" <th>C202510</th>\n",
" <th>C202511</th>\n",
" <th>C202512</th>\n",
" <th>PICO DE VENDAS 17CICLOS</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>20968</td>\n",
" <td>56572</td>\n",
" <td>56572</td>\n",
" <td>35</td>\n",
" <td>0</td>\n",
" <td>None</td>\n",
" <td>B</td>\n",
" <td>PERFUMARIA</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>9.0</td>\n",
" <td>4.0</td>\n",
" <td>14.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>38.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>20969</td>\n",
" <td>56572</td>\n",
" <td>56572</td>\n",
" <td>30</td>\n",
" <td>0</td>\n",
" <td>None</td>\n",
" <td>B</td>\n",
" <td>PERFUMARIA</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>2.0</td>\n",
" <td>37.0</td>\n",
" <td>34.0</td>\n",
" <td>14.0</td>\n",
" <td>3.0</td>\n",
" <td>2.0</td>\n",
" <td>4.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>37.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>20970</td>\n",
" <td>56572</td>\n",
" <td>56572</td>\n",
" <td>81</td>\n",
" <td>0</td>\n",
" <td>None</td>\n",
" <td>E</td>\n",
" <td>PERFUMARIA</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>20986</td>\n",
" <td>56572</td>\n",
" <td>56572</td>\n",
" <td>71</td>\n",
" <td>0</td>\n",
" <td>None</td>\n",
" <td>E</td>\n",
" <td>PERFUMARIA</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>20988</td>\n",
" <td>56572</td>\n",
" <td>56572</td>\n",
" <td>51</td>\n",
" <td>0</td>\n",
" <td>None</td>\n",
" <td>E</td>\n",
" <td>PERFUMARIA</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 63 columns</p>\n",
"</div>"
],
"text/plain": [
" pdv SKU SKU_FINAL ESTOQUE ATUAL ESTOQUE EM TRANSITO PEDIDO PENDENTE \\\n",
"0 20968 56572 56572 35 0 None \n",
"1 20969 56572 56572 30 0 None \n",
"2 20970 56572 56572 81 0 None \n",
"3 20986 56572 56572 71 0 None \n",
"4 20988 56572 56572 51 0 None \n",
"\n",
" Curva CATEGORIA DiasSemVenda nextcycleprojection ... C202504 C202505 \\\n",
"0 B PERFUMARIA 0.0 0.0 ... 0.0 9.0 \n",
"1 B PERFUMARIA 0.0 0.0 ... 2.0 37.0 \n",
"2 E PERFUMARIA 0.0 0.0 ... 0.0 0.0 \n",
"3 E PERFUMARIA 0.0 0.0 ... 0.0 0.0 \n",
"4 E PERFUMARIA 0.0 0.0 ... 0.0 0.0 \n",
"\n",
" C202506 C202507 C202508 C202509 C202510 C202511 C202512 \\\n",
"0 4.0 14.0 0.0 0.0 1.0 0.0 0.0 \n",
"1 34.0 14.0 3.0 2.0 4.0 1.0 0.0 \n",
"2 0.0 0.0 0.0 0.0 0.0 0.0 NaN \n",
"3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n",
"4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n",
"\n",
" PICO DE VENDAS 17CICLOS \n",
"0 38.0 \n",
"1 37.0 \n",
"2 0.0 \n",
"3 0.0 \n",
"4 0.0 \n",
"\n",
"[5 rows x 63 columns]"
]
},
"execution_count": 211,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_final.head()"
]
},
{
"cell_type": "code",
"execution_count": 212,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"PDV\n",
"20968 348\n",
"20991 348\n",
"20995 348\n",
"20996 348\n",
"20997 348\n",
"20998 348\n",
"21278 348\n",
"20969 347\n",
"22541 347\n",
"21495 346\n",
"20992 333\n",
"20986 333\n",
"20993 333\n",
"20989 333\n",
"20988 333\n",
"20970 333\n",
"21000 333\n",
"20999 333\n",
"20994 333\n",
"21001 333\n",
"21383 333\n",
"21375 333\n",
"22448 333\n",
"23703 333\n",
"23704 333\n",
"23711 333\n",
"23712 333\n",
"24255 333\n",
"24257 333\n",
"24269 333\n",
"24293 333\n",
"23813 333\n",
"Name: count, dtype: int64"
]
},
"execution_count": 212,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_final.PDV.value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 213,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['C202412', 'C202413', 'C202414', 'C202415', 'C202416', 'C202417',\n",
" 'C202501', 'C202502', 'C202503', 'C202504', 'C202505', 'C202506',\n",
" 'C202507', 'C202508', 'C202509', 'C202510', 'C202511'],\n",
" dtype='object')"
]
},
"execution_count": 213,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sales_2024_cols"
]
},
{
"cell_type": "code",
"execution_count": 214,
"metadata": {},
"outputs": [],
"source": [
"vendas_6_meses = df_final.columns[-8:-2]\n",
"\n",
"df_final['Pico Vendas Ultimos 6 ciclos'] = df_final[vendas_6_meses].max(axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 215,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'C202413'"
]
},
"execution_count": 215,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_final.columns[-19]"
]
},
{
"cell_type": "code",
"execution_count": 216,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.22600883356755672\n"
]
}
],
"source": [
"CRESCIMENTO = (df_final[df_final.columns[-18]].sum() - df_final[df_final.columns[-3]].sum())/df_final[df_final.columns[-18]].sum() \n",
"print(CRESCIMENTO)\n",
"\n",
"df_final['CRESCIMENTO'] = .2"
]
},
{
"cell_type": "code",
"execution_count": 217,
"metadata": {},
"outputs": [],
"source": [
"mesmo_ciclo_ano_passado = df_final.columns[-19]\n",
"ciclo_ano_passado = df_final.columns[-19:-18].str.split(\" \")[0][-1]\n",
"df_final[ciclo_ano_passado] = df_final[mesmo_ciclo_ano_passado]"
]
},
{
"cell_type": "code",
"execution_count": 218,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'C202414'"
]
},
"execution_count": 218,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_final.columns[-19:-18].str.split(\" \")[0][-1]"
]
},
{
"cell_type": "code",
"execution_count": 219,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['C202412', 'C202413', 'C202414', 'C202415', 'C202416', 'C202417',\n",
" 'C202501', 'C202502', 'C202503', 'C202504', 'C202505', 'C202506',\n",
" 'C202507', 'C202508', 'C202509', 'C202510', 'C202511', 'C202512'],\n",
" dtype='object')"
]
},
"execution_count": 219,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_final.columns[-21:-3]"
]
},
{
"cell_type": "code",
"execution_count": 220,
"metadata": {},
"outputs": [],
"source": [
"vendas_todos_historicos = df_final.columns[-21:-3]\n",
"\n",
"df_final['MEDIANA DO HISTÓRICO'] = df_final[vendas_todos_historicos].median(axis=1)\n",
"\n",
"df_final['MEDIA DO HISTÓRICO'] = df_final[vendas_todos_historicos].mean(axis=1)\n",
"\n",
"df_final['MEDIANA DO HISTÓRICO'] = np.where(df_final['MEDIANA DO HISTÓRICO'] <1,df_final['MEDIA DO HISTÓRICO'],df_final['MEDIANA DO HISTÓRICO'])\n"
]
},
{
"cell_type": "code",
"execution_count": 221,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"np.float64(0.22600883356755672)"
]
},
"execution_count": 221,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"CRESCIMENTO"
]
},
{
"cell_type": "code",
"execution_count": 222,
"metadata": {},
"outputs": [],
"source": [
"df_final['PV GINSENG'] = np.where(df_final['CRESCIMENTO'] * df_final[ciclo_ano_passado] + df_final[ciclo_ano_passado] < df_final['MEDIANA DO HISTÓRICO'],\n",
" np.ceil(df_final['CRESCIMENTO'] * df_final['MEDIANA DO HISTÓRICO']+ df_final['MEDIANA DO HISTÓRICO']), \n",
" np.ceil(df_final['CRESCIMENTO']*df_final[ciclo_ano_passado]+df_final[ciclo_ano_passado]))"
]
},
{
"cell_type": "code",
"execution_count": 223,
"metadata": {},
"outputs": [],
"source": [
"#df_final['PV GINSENG'] = np.where(df_final['PV GINSENG']<1, df_final['Projeção Próximo Ciclo + 1'],df_final['PV GINSENG'])"
]
},
{
"cell_type": "code",
"execution_count": 224,
"metadata": {},
"outputs": [],
"source": [
"#df_final = df_final.rename(columns={df_final.columns[18]: \"C-4\", df_final.columns[19]: \"C-3\",df_final.columns[20]: \"C-2\",df_final.columns[21]: \"C-1\"})"
]
},
{
"cell_type": "code",
"execution_count": 225,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['pdv', 'SKU', 'SKU_FINAL', 'ESTOQUE ATUAL', 'ESTOQUE EM TRANSITO',\n",
" 'PEDIDO PENDENTE', 'Curva', 'CATEGORIA', 'DiasSemVenda',\n",
" 'nextcycleprojection', 'secondtonextcycleprojection', 'Ciclo_x',\n",
" 'Veiculo', 'Tipo de Promoção', 'Estratégia de Promoção',\n",
" 'Tipo_mecanica', 'Promo Período Limitado?', 'EAM', 'Categoria',\n",
" 'Cód. Combo', 'Código do Item', 'Descrição do Item',\n",
" 'Chamada Promocional', 'Valor do Guia', 'Preço Promocionado',\n",
" '% de Desconto', 'RE compra por', 'RE Vende por', 'RE lucra (R$)',\n",
" 'MATCH', 'PDV', 'UF', 'DESCRIÇÃO PDV', 'ANALISTA', 'match', 'Ciclo_y',\n",
" 'INICIO CICLO', 'FIM CICLO', 'DURAÇÃO', 'dias_ate_inicio', 'PDV_SKU',\n",
" 'UFPRODUTO', 'DESCRICAO', 'C202411', 'C202412', 'C202413', 'C202414',\n",
" 'C202415', 'C202416', 'C202417', 'C202501', 'C202502', 'C202503',\n",
" 'C202504', 'C202505', 'C202506', 'C202507', 'C202508', 'C202509',\n",
" 'C202510', 'C202511', 'C202512', 'PICO DE VENDAS 17CICLOS',\n",
" 'Pico Vendas Ultimos 6 ciclos', 'CRESCIMENTO', 'MEDIANA DO HISTÓRICO',\n",
" 'MEDIA DO HISTÓRICO', 'PV GINSENG'],\n",
" dtype='object')"
]
},
"execution_count": 225,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_final.columns"
]
},
{
"cell_type": "code",
"execution_count": 226,
"metadata": {},
"outputs": [],
"source": [
"df_final.drop(columns=df_final.columns[-21:-10], inplace=True)\n",
"\n",
"df_final.drop(columns=df_final.columns[-13:-11], inplace=True)\n"
]
},
{
"cell_type": "code",
"execution_count": 227,
"metadata": {},
"outputs": [],
"source": [
"# List all columns except the two\n",
"cols_to_group_by = df_final.columns.difference(['DDV PREVISTO', 'COBERTURA ATUAL'])\n",
"\n",
"# Group and aggregate\n",
"df_final_dedup = df_final\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 228,
"metadata": {},
"outputs": [],
"source": [
"#df_final['Compra inteligente Próximo Ciclo']\n"
]
},
{
"cell_type": "code",
"execution_count": 229,
"metadata": {},
"outputs": [],
"source": [
"#df_final['DDV PREVISTO'] = df_final['DDV PREVISTO'].fillna(0.01)\n"
]
},
{
"cell_type": "code",
"execution_count": 230,
"metadata": {},
"outputs": [],
"source": [
"#df_final_dedup['DDV PREVISTO'] = np.where(\n",
"# df_final_dedup['DDV PREVISTO'] == 0,\n",
"# 0.01,\n",
"# df_final_dedup['DDV PREVISTO']\n",
"#)\n"
]
},
{
"cell_type": "code",
"execution_count": 231,
"metadata": {},
"outputs": [],
"source": [
"#df_final_dedup['DDV PREVISTO'].value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 232,
"metadata": {},
"outputs": [],
"source": [
"#df_final_dedup['EST PROJE FINAL CICLO ATUAL'] = (df_final_dedup['Estoque Atual'] + df_final_dedup['Estoque em Transito']) - round(df_final_dedup['dias_ate_inicio'] * df_final_dedup['DDV PREVISTO'],0)"
]
},
{
"cell_type": "code",
"execution_count": 233,
"metadata": {},
"outputs": [],
"source": [
"#df_final_dedup['EST PROJE FINAL CICLO ATUAL'] = np.where(df_final_dedup['EST PROJE FINAL CICLO ATUAL']<0,0,df_final_dedup['EST PROJE FINAL CICLO ATUAL'])"
]
},
{
"cell_type": "code",
"execution_count": 234,
"metadata": {},
"outputs": [],
"source": [
"#df_final_dedup.columns"
]
},
{
"cell_type": "code",
"execution_count": 235,
"metadata": {},
"outputs": [],
"source": [
"#df_final_dedup['VENDAS R$ PV GINSENG'] = df_final_dedup['PRECO DE VENDA'] * df_final_dedup['PV GINSENG']"
]
},
{
"cell_type": "code",
"execution_count": 236,
"metadata": {},
"outputs": [],
"source": [
"#df_final_dedup = df_final_dedup.rename(columns={'Ciclo_x':'Ciclo'})"
]
},
{
"cell_type": "code",
"execution_count": 237,
"metadata": {},
"outputs": [],
"source": [
"df_final_dedup['SUGESTÃO ABTASTECIMENTO\t'] = ''\n",
"df_final_dedup['VENDAS R$ ABASTECIMENTO'] = ''\n"
]
},
{
"cell_type": "code",
"execution_count": 238,
"metadata": {},
"outputs": [],
"source": [
"#df_final_dedup['RBV 202406'] = df_final_dedup['PRECO DE VENDA'] * df_final_dedup[ciclo_ano_passado] "
]
},
{
"cell_type": "code",
"execution_count": 239,
"metadata": {},
"outputs": [],
"source": [
"#df_final_dedup['COB PROJETADA'] = np.where(\n",
"# df_final_dedup['DDV PREVISTO'] != 0,\n",
"# (df_final_dedup['EST PROJE FINAL CICLO ATUAL'] + df_final_dedup['PV GINSENG']) / df_final_dedup['DDV PREVISTO'],\n",
"# 999)\n"
]
},
{
"cell_type": "code",
"execution_count": 240,
"metadata": {},
"outputs": [],
"source": [
"#df_final_dedup.drop(columns=['dias_ate_inicio','SKU_FINAL','Projeção Próximo Ciclo + 1',\n",
"# 'CRESCIMENTO'],inplace=True)"
]
},
{
"cell_type": "code",
"execution_count": 241,
"metadata": {},
"outputs": [],
"source": [
"#df_final_dedup['MARCA'] = df_final_dedup['MARCA'].str.replace('.csv','',regex=False)"
]
},
{
"cell_type": "code",
"execution_count": 242,
"metadata": {},
"outputs": [],
"source": [
"#df_final_dedup['COB PROJETADA'] = df_final_dedup['COB PROJETADA'].fillna(999)"
]
},
{
"cell_type": "code",
"execution_count": 243,
"metadata": {},
"outputs": [],
"source": [
"#df_final_dedup.columns"
]
},
{
"cell_type": "code",
"execution_count": 244,
"metadata": {},
"outputs": [],
"source": [
"#marca_promo = df_estoque['Arquivo_Origem'].iloc[0].replace('.csv','')\n",
"#marca_promo"
]
},
{
"cell_type": "code",
"execution_count": 245,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['pdv', 'SKU', 'SKU_FINAL', 'ESTOQUE ATUAL', 'ESTOQUE EM TRANSITO',\n",
" 'PEDIDO PENDENTE', 'Curva', 'CATEGORIA', 'DiasSemVenda',\n",
" 'nextcycleprojection', 'secondtonextcycleprojection', 'Ciclo_x',\n",
" 'Veiculo', 'Tipo de Promoção', 'Estratégia de Promoção',\n",
" 'Tipo_mecanica', 'Promo Período Limitado?', 'EAM', 'Categoria',\n",
" 'Cód. Combo', 'Código do Item', 'Descrição do Item',\n",
" 'Chamada Promocional', 'Valor do Guia', 'Preço Promocionado',\n",
" '% de Desconto', 'RE compra por', 'RE Vende por', 'RE lucra (R$)',\n",
" 'MATCH', 'PDV', 'UF', 'DESCRIÇÃO PDV', 'ANALISTA', 'match', 'Ciclo_y',\n",
" 'INICIO CICLO', 'FIM CICLO', 'DURAÇÃO', 'dias_ate_inicio', 'PDV_SKU',\n",
" 'UFPRODUTO', 'DESCRICAO', 'C202411', 'C202414', 'C202509', 'C202510',\n",
" 'C202511', 'C202512', 'PICO DE VENDAS 17CICLOS',\n",
" 'Pico Vendas Ultimos 6 ciclos', 'CRESCIMENTO', 'MEDIANA DO HISTÓRICO',\n",
" 'MEDIA DO HISTÓRICO', 'PV GINSENG', 'SUGESTÃO ABTASTECIMENTO\\t',\n",
" 'VENDAS R$ ABASTECIMENTO'],\n",
" dtype='object')"
]
},
"execution_count": 245,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_final.columns"
]
},
{
"cell_type": "code",
"execution_count": 246,
"metadata": {},
"outputs": [],
"source": [
"# Passo 1: ordenar\n",
"df_sorted = df_final.sort_values(by='% de Desconto', ascending=False)\n",
"\n",
"# Passo 2: obter até 3 chamadas promocionais por grupo\n",
"promo_grouped = (\n",
" df_sorted.groupby(['SKU_FINAL', 'PDV'])['Chamada Promocional']\n",
" .apply(lambda x: x.dropna().unique()[:3])\n",
" .apply(pd.Series)\n",
" .rename(columns={0: 'MECÂNICA 1', 1: 'MECÂNICA 2', 2: 'MECÂNICA 3'})\n",
" .reset_index()\n",
")\n",
"\n",
"# Passo 3: base com maior % de desconto\n",
"df_base = df_sorted.drop_duplicates(subset=['SKU_FINAL', 'PDV'], keep='first').reset_index(drop=True)\n",
"\n",
"# Passo 4: merge com chamadas pivotadas\n",
"df_merged = df_base.merge(promo_grouped, on=['SKU_FINAL', 'PDV'], how='left')\n",
"\n",
"# Corrigir dicionário: agrupar e pegar o primeiro valor válido por (SKU_FINAL, PDV)\n",
"# Passo 1: dicionário com Cód. Combo único por SKU_FINAL+PDV\n",
"cod_combo_map = (\n",
" df_final\n",
" .dropna(subset=['Cód. Combo'])\n",
" .groupby(['SKU_FINAL', 'PDV'])['Cód. Combo']\n",
" .first()\n",
" .to_dict()\n",
")\n",
"\n",
"# Passo 2: gerar Series com os valores mapeados\n",
"cod_combo_series = df_merged.set_index(['SKU_FINAL', 'pdv']).index.map(cod_combo_map)\n",
"\n",
"# Passo 3: substituir os valores diretamente\n",
"df_merged['Cód. Combo'] = cod_combo_series.where(cod_combo_series.notna(), df_merged['Cód. Combo'])\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 247,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"PDV\n",
"21375 270\n",
"21383 270\n",
"21495 270\n",
"22448 270\n",
"22541 270\n",
"23703 270\n",
"20969 270\n",
"20968 270\n",
"23704 270\n",
"23711 270\n",
"20999 270\n",
"21000 270\n",
"20994 270\n",
"20993 270\n",
"20995 270\n",
"20996 270\n",
"20997 270\n",
"20998 270\n",
"20986 270\n",
"20970 270\n",
"20991 270\n",
"20992 270\n",
"20989 270\n",
"20988 270\n",
"21001 270\n",
"21278 270\n",
"23813 270\n",
"24293 270\n",
"24269 270\n",
"24257 270\n",
"24255 270\n",
"23712 270\n",
"Name: count, dtype: int64"
]
},
"execution_count": 247,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_merged.PDV.value_counts()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Columns to bring up front\n",
"priority_cols = [\n",
" 'PDV_SKU',\t'SKU',\t'MARCA','INICIO CICLO',\n",
" 'FIM CICLO',\t'DURAÇÃO','dias_ate_inicio',\t\n",
" 'UFPRODUTO',\t'Item Desativado',\t'Data Prevista Regularização',\n",
" 'ANALISTA',\t'UF',\t'PDV',\t'DESCRIÇÃO PDV',\t'Classe',\n",
" 'Descrição','MECÂNICA 1',\n",
" 'MECÂNICA 2', 'MECÂNICA 3','Estoque Atual',\t'COBERTURA ATUAL',\n",
" 'Estoque em Transito',\t'Pedido Pendente',\t'PICO DE VENDAS 2024','Pico Vendas Ultimos 6 ciclos',\n",
" 'C-4',\t'C-3',\t'C-2',\t'C-1',\t'Histórico de Vendas do Ciclo Atual',\n",
" 'Dias sem venda'\n",
"]\n",
"\n",
"# All remaining columns\n",
"other_cols = [col for col in df_merged.columns if col not in priority_cols]\n",
"\n",
"# Reorder\n",
"df_merged = df_merged[priority_cols + other_cols]\n"
]
},
{
"cell_type": "code",
"execution_count": 248,
"metadata": {},
"outputs": [],
"source": [
"df_merged['INICIO CICLO'] = pd.to_datetime(df_merged['INICIO CICLO'], dayfirst=True).dt.strftime('%d/%m/%Y')\n",
"\n",
"df_merged['FIM CICLO'] = pd.to_datetime(df_merged['FIM CICLO'], dayfirst=True).dt.strftime('%d/%m/%Y')"
]
},
{
"cell_type": "code",
"execution_count": 249,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['pdv', 'SKU', 'SKU_FINAL', 'ESTOQUE ATUAL', 'ESTOQUE EM TRANSITO',\n",
" 'PEDIDO PENDENTE', 'Curva', 'CATEGORIA', 'DiasSemVenda',\n",
" 'nextcycleprojection', 'secondtonextcycleprojection', 'Ciclo_x',\n",
" 'Veiculo', 'Tipo de Promoção', 'Estratégia de Promoção',\n",
" 'Tipo_mecanica', 'Promo Período Limitado?', 'EAM', 'Categoria',\n",
" 'Cód. Combo', 'Código do Item', 'Descrição do Item',\n",
" 'Chamada Promocional', 'Valor do Guia', 'Preço Promocionado',\n",
" '% de Desconto', 'RE compra por', 'RE Vende por', 'RE lucra (R$)',\n",
" 'MATCH', 'PDV', 'UF', 'DESCRIÇÃO PDV', 'ANALISTA', 'match', 'Ciclo_y',\n",
" 'INICIO CICLO', 'FIM CICLO', 'DURAÇÃO', 'dias_ate_inicio', 'PDV_SKU',\n",
" 'UFPRODUTO', 'DESCRICAO', 'C202411', 'C202414', 'C202509', 'C202510',\n",
" 'C202511', 'C202512', 'PICO DE VENDAS 17CICLOS',\n",
" 'Pico Vendas Ultimos 6 ciclos', 'CRESCIMENTO', 'MEDIANA DO HISTÓRICO',\n",
" 'MEDIA DO HISTÓRICO', 'PV GINSENG', 'SUGESTÃO ABTASTECIMENTO\\t',\n",
" 'VENDAS R$ ABASTECIMENTO', 'MECÂNICA 1', 'MECÂNICA 2', 'MECÂNICA 3'],\n",
" dtype='object')"
]
},
"execution_count": 249,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_merged.columns"
]
},
{
"cell_type": "code",
"execution_count": 250,
"metadata": {},
"outputs": [],
"source": [
"df_merged = df_merged.loc[:, ~df_merged.columns.str.endswith('_y')]\n"
]
},
{
"cell_type": "code",
"execution_count": 251,
"metadata": {},
"outputs": [],
"source": [
"df_merged.columns = df_merged.columns.str.replace('_x$', '', regex=True)\n"
]
},
{
"cell_type": "code",
"execution_count": 252,
"metadata": {},
"outputs": [],
"source": [
"df_merged['DESCRICAO'] = df_merged['Descrição do Item']"
]
},
{
"cell_type": "code",
"execution_count": 253,
"metadata": {},
"outputs": [],
"source": [
"df_merged['SKU'] = np.where(df_merged['SKU'].isna(),df_merged['SKU_FINAL'],df_merged['SKU'])"
]
},
{
"cell_type": "code",
"execution_count": 254,
"metadata": {},
"outputs": [],
"source": [
"df_merged = df_merged.drop(columns=['Veiculo',\t'Tipo de Promoção',\t'Estratégia de Promoção','Tipo_mecanica'\n",
" ,'Chamada Promocional','MATCH','match','Descrição do Item','CRESCIMENTO',\n",
" 'Cód. Combo'])"
]
},
{
"cell_type": "code",
"execution_count": 255,
"metadata": {},
"outputs": [],
"source": [
"df_merged = df_merged.drop(columns=['Código do Item','PDV','RE compra por',\t'RE Vende por',\t'RE lucra (R$)','INICIO CICLO',\n",
" 'FIM CICLO','Ciclo','CATEGORIA','ANALISTA','dias_ate_inicio','PDV_SKU','UFPRODUTO',\n",
" 'VENDAS R$ ABASTECIMENTO','DURAÇÃO','MEDIANA DO HISTÓRICO','DURAÇÃO'])"
]
},
{
"cell_type": "code",
"execution_count": 256,
"metadata": {},
"outputs": [],
"source": [
"df_merged = df_merged.rename(columns={'nextcycleprojection':'PROJEÇÃO PROX CICLO'\t,'secondtonextcycleprojection':'PROJEÇÃO PROX CICLO +1'})"
]
},
{
"cell_type": "code",
"execution_count": 257,
"metadata": {},
"outputs": [],
"source": [
"df_merged.columns = df_merged.columns.str.upper()"
]
},
{
"cell_type": "code",
"execution_count": 258,
"metadata": {},
"outputs": [],
"source": [
"#df_merged = df_merged[['UF','PDV','DESCRIÇÃO PDV','SKU','DESCRICAO','EAM','CATEGORIA','CURVA','ESTOQUE ATUAL','ESTOQUE EM TRANSITO','PEDIDO PENDENTE','DIASSEMVENDA','PROJEÇÃO PROX CICLO','PROJEÇÃO PROX CICLO +1','PROMO PERÍODO LIMITADO?','VALOR DO GUIA','PREÇO PROMOCIONADO','% DE DESCONTO','PICO DE VENDAS 17CICLOS','PICO VENDAS ULTIMOS 6 CICLOS','MEDIA DO HISTÓRICO']]"
]
},
{
"cell_type": "code",
"execution_count": 259,
"metadata": {},
"outputs": [],
"source": [
"df_merged['MEDIA DO HISTÓRICO'] = round(df_merged['MEDIA DO HISTÓRICO'],0)"
]
},
{
"cell_type": "code",
"execution_count": 260,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['PDV', 'SKU', 'SKU_FINAL', 'ESTOQUE ATUAL', 'ESTOQUE EM TRANSITO',\n",
" 'PEDIDO PENDENTE', 'CURVA', 'DIASSEMVENDA', 'PROJEÇÃO PROX CICLO',\n",
" 'PROJEÇÃO PROX CICLO +1', 'PROMO PERÍODO LIMITADO?', 'EAM', 'CATEGORIA',\n",
" 'VALOR DO GUIA', 'PREÇO PROMOCIONADO', '% DE DESCONTO', 'UF',\n",
" 'DESCRIÇÃO PDV', 'DESCRICAO', 'C202411', 'C202414', 'C202509',\n",
" 'C202510', 'C202511', 'C202512', 'PICO DE VENDAS 17CICLOS',\n",
" 'PICO VENDAS ULTIMOS 6 CICLOS', 'MEDIA DO HISTÓRICO', 'PV GINSENG',\n",
" 'SUGESTÃO ABTASTECIMENTO\\t', 'MECÂNICA 1', 'MECÂNICA 2', 'MECÂNICA 3'],\n",
" dtype='object')"
]
},
"execution_count": 260,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_merged.columns"
]
},
{
"cell_type": "code",
"execution_count": 261,
"metadata": {},
"outputs": [],
"source": [
"df_merged['SUGESTÃO COMERCIAL'] =\"\""
]
},
{
"cell_type": "code",
"execution_count": 262,
"metadata": {},
"outputs": [],
"source": [
"# Colunas que devem estar na frente\n",
"colunas_inicio = [\n",
" 'UF', 'PDV', 'DESCRIÇÃO PDV', 'SKU', 'DESCRICAO', 'EAM', 'CATEGORIA', 'CURVA',\n",
" 'ESTOQUE ATUAL', 'ESTOQUE EM TRANSITO', 'PEDIDO PENDENTE', 'DIASSEMVENDA',\n",
" 'PROJEÇÃO PROX CICLO', 'PROJEÇÃO PROX CICLO +1', 'PROMO PERÍODO LIMITADO?',\n",
" 'VALOR DO GUIA', 'PREÇO PROMOCIONADO', '% DE DESCONTO',\n",
" 'PICO DE VENDAS 17CICLOS', 'PICO VENDAS ULTIMOS 6 CICLOS', 'MEDIA DO HISTÓRICO'\n",
"]\n",
"\n",
"# Colunas que devem estar no fim\n",
"colunas_fim = [\n",
" 'PV GINSENG', 'SUGESTÃO ABTASTECIMENTO\\t', 'SUGESTÃO COMERCIAL'\n",
"]\n",
"\n",
"# Todas as outras colunas (não estão nem no início nem no fim)\n",
"colunas_meio = [col for col in df_merged.columns if col not in colunas_inicio + colunas_fim]\n",
"\n",
"# Reordena o DataFrame\n",
"df_merged = df_merged[colunas_inicio + colunas_meio + colunas_fim]\n"
]
},
{
"cell_type": "code",
"execution_count": 263,
"metadata": {},
"outputs": [],
"source": [
"df_merged = df_merged.drop_duplicates()"
]
},
{
"cell_type": "code",
"execution_count": 264,
"metadata": {},
"outputs": [],
"source": [
"\n",
"from openpyxl import load_workbook\n",
"from openpyxl.styles import PatternFill, Font\n",
"\n",
"\n",
"# Export to Excel\n",
"output_file = f'C:\\\\Users\\\\joao.herculano\\\\Documents\\\\EUD_promoção_{ciclo_mais2}_25.08.xlsx'\n",
"with pd.ExcelWriter(output_file, engine='openpyxl') as writer:\n",
" df_merged.to_excel(writer, index=False, sheet_name='Sheet1')\n",
"\n",
"# Apply styles\n",
"wb = load_workbook(output_file)\n",
"ws = wb['Sheet1']\n",
"\n",
"# Style header\n",
"header_fill = PatternFill(start_color='ADD8E6', end_color='ADD8E6', fill_type='solid') # Light Blue\n",
"header_font = Font(color='FFFFFF', bold=True) # White & Bold\n",
"\n",
"for cell in ws[1]:\n",
" cell.fill = header_fill\n",
" cell.font = header_font\n",
"\n",
"# Style rows: gray/white alternating\n",
"gray_fill = PatternFill(start_color='DDDDDD', end_color='DDDDDD', fill_type='solid') # Light gray\n",
"\n",
"for i, row in enumerate(ws.iter_rows(min_row=2, max_row=ws.max_row), start=2):\n",
" if i % 2 == 0:\n",
" for cell in row:\n",
" cell.fill = gray_fill\n",
"\n",
"# Save styled workbook\n",
"wb.save(output_file)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"coisas q saem\n",
"\n",
"Lançamento\n",
"Subcategoria\n",
"Projeção Próximo Ciclo \n",
"Promoção Próximo Ciclo\n",
"Compra inteligente semanal/Sugestão de compra\n",
"Compra inteligente Próximo Ciclo\n",
"Planograma\n",
"Carteira Bloqueada Para Novos Pedidos\n",
"Quantidade por caixa\n",
"Preço Sell In\n",
"Quantidade\n",
"Item analisado\n",
"Tipo Preço\n",
"\n",
">>>>>>>>>>>>>NAO ESTÁ PEGANDO O MERGE COM O DF_ESTOQUE\n",
"\n",
"\n",
"CRIAR PROJEÇÃO DE VENDA DO CICLO ATUAL\n",
"Compra inteligente Próximo Ciclo + 1 >>>>>>> RENAME PRA NOROMAL"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.13.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}