6178 lines
209 KiB
Plaintext
6178 lines
209 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 1,
|
||
"id": "6ad35669",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import pandas as pd\n",
|
||
"import numpy as np \n",
|
||
"import glob\n",
|
||
"import os \n",
|
||
"from datetime import datetime"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 2,
|
||
"id": "fa16d50c",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"hoje = datetime.today().strftime('%Y-%m-%d')"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 3,
|
||
"id": "9fcdc77a",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"calendario = pd.read_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\BD_LANÇAMENTOS\\BASE DE DADOS LANÇAMENTO\\BOT\\CICLO 9\\CALENDARIO_CICLO\\Ciclo_Expandido_com_Datas.xlsx\")\n",
|
||
"\n",
|
||
"calendario['Date'] = pd.to_datetime(calendario['Date'])\n",
|
||
"\n",
|
||
"# Get today (normalized to midnight)\n",
|
||
"today = pd.Timestamp(\"today\").normalize()\n",
|
||
"\n",
|
||
"calendario['NUM_CICLO'] = calendario['Ciclo'].str[-2:].astype(int)\n",
|
||
"\n",
|
||
"calendario['ANO_CICLO'] = calendario['Ciclo'].str[0:5]\n",
|
||
"\n",
|
||
"calendario = calendario[calendario['MARCA'] == \"BOTICARIO\"]\n",
|
||
"\n",
|
||
"calendario['CICLOMAIS2'] = calendario['ANO_CICLO'].astype(str) + (calendario['NUM_CICLO'].astype(int) + 3).astype(str).str.zfill(2) #<<< MUDAR O \"4\" (CICLO ATUAL + 4 PARA ACHAR O CICLO DA SUGESTÃO) EX: C202505 -> C202509\n",
|
||
"ciclo_mais2 = calendario[calendario['Date'].dt.normalize() == today]['CICLOMAIS2'].iloc[0]\n",
|
||
"\n",
|
||
"# Filter rows where date matches today\n",
|
||
"filtered_calendario = calendario[calendario['Ciclo'] == ciclo_mais2][:1]\n",
|
||
"\n",
|
||
"filtered_calendario['dias_ate_inicio'] = filtered_calendario['INICIO CICLO'].iloc[0] - today\n",
|
||
"\n",
|
||
"filtered_calendario['dias_ate_inicio'] = filtered_calendario['dias_ate_inicio'].dt.days.astype(int)\n",
|
||
"\n",
|
||
"filtered_calendario['match'] = 1\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 4,
|
||
"id": "bbec229d",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<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",
|
||
" <th>match</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>2409</th>\n",
|
||
" <td>C202515</td>\n",
|
||
" <td>2025-10-13</td>\n",
|
||
" <td>2025-11-02</td>\n",
|
||
" <td>21</td>\n",
|
||
" <td>BOTICARIO</td>\n",
|
||
" <td>2025-10-13</td>\n",
|
||
" <td>15</td>\n",
|
||
" <td>C2025</td>\n",
|
||
" <td>C202518</td>\n",
|
||
" <td>59</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" Ciclo INICIO CICLO FIM CICLO DURAÇÃO MARCA Date \\\n",
|
||
"2409 C202515 2025-10-13 2025-11-02 21 BOTICARIO 2025-10-13 \n",
|
||
"\n",
|
||
" NUM_CICLO ANO_CICLO CICLOMAIS2 dias_ate_inicio match \n",
|
||
"2409 15 C2025 C202518 59 1 "
|
||
]
|
||
},
|
||
"execution_count": 4,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"filtered_calendario"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 5,
|
||
"id": "0245ed28",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"ciclo_lanc = filtered_calendario['Ciclo'].max()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 6,
|
||
"id": "7a3c1e6f",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"'C202515'"
|
||
]
|
||
},
|
||
"execution_count": 6,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"ciclo_lanc"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 7,
|
||
"id": "61ffc777",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_similares = pd.read_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\BD_LANÇAMENTOS\\BOT\\BOT - C15\\arquivos para geração da sugestão\\SIMILARES\\PRODUTOS SIMILARES - BOT.xlsx\")\n",
|
||
"\n",
|
||
"df_similares = pd.merge(left=df_similares,right=calendario[['Ciclo','INICIO CICLO','FIM CICLO','DURAÇÃO']], how= 'left', left_on = 'CICLO SIMILAR',right_on = 'Ciclo' )\n",
|
||
"\n",
|
||
"df_similares = df_similares.drop(columns=['Ciclo'])\n",
|
||
"\n",
|
||
"df_similares = df_similares.rename(columns={'INICIO CICLO':'INICIO CICLO SIMILAR','FIM CICLO':'FIM CICLO SIMILAR','DURAÇÃO':'DURAÇÃO CICLO SIMILAR'})\n",
|
||
"df_similares.drop_duplicates(inplace=True)\n",
|
||
"\n",
|
||
"df_similares['MATCH'] = 1\n",
|
||
"\n",
|
||
"df_similares = df_similares.drop(columns=['INICIO DO CICLO', 'FIM DO CICLO', 'DURAÇÃO CICLO','INICIO CICLO SIMILAR','FIM CICLO SIMILAR','DURAÇÃO CICLO SIMILAR'])"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 8,
|
||
"id": "ad836441",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_similares['PRODUTO SIMILAR'] = df_similares['PRODUTO SIMILAR'].astype('str')\n",
|
||
"\n",
|
||
"df_similares['PRODUTO SIMILAR'] = df_similares['PRODUTO SIMILAR'].replace(r'\\.0$', '', regex=True)\n",
|
||
"\n",
|
||
"\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 9,
|
||
"id": "1fdd05a3",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"PRODUTO SIMILAR\n",
|
||
"52004 1\n",
|
||
"52008 1\n",
|
||
"52005 1\n",
|
||
"72929 1\n",
|
||
"53389 1\n",
|
||
"57474 1\n",
|
||
"52012 1\n",
|
||
"58138 1\n",
|
||
"49973 1\n",
|
||
"1006 1\n",
|
||
"53342 1\n",
|
||
"47963 1\n",
|
||
"84056 1\n",
|
||
"25458 1\n",
|
||
"48136 1\n",
|
||
"51448 1\n",
|
||
"1004 1\n",
|
||
"58373 1\n",
|
||
"75792 1\n",
|
||
"55659 1\n",
|
||
"48635 1\n",
|
||
"48621 1\n",
|
||
"59306 1\n",
|
||
"49225 1\n",
|
||
"49228 1\n",
|
||
"57759 1\n",
|
||
"55766 1\n",
|
||
"87000 1\n",
|
||
"87771 1\n",
|
||
"Name: count, dtype: int64"
|
||
]
|
||
},
|
||
"execution_count": 9,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"\n",
|
||
"\n",
|
||
"df_similares = df_similares[df_similares['PRODUTO SIMILAR']!= 'nan']\n",
|
||
"\n",
|
||
"df_similares['PRODUTO SIMILAR'].value_counts()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 10,
|
||
"id": "99ea95e6",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"Index(['PRODUTO LANÇAMENTO', 'DESCRIÇÃO DO LANÇAMENTO', 'PRODUTO SIMILAR',\n",
|
||
" 'DESCRIÇÃO SIMILAR', 'CICLO SIMILAR', 'FOCO', 'IAF', 'CATEGORIA',\n",
|
||
" 'MARCA', '% CONSUMIDOR', 'MECANICA CONSUMIDOR', '% REVENDEDOR',\n",
|
||
" 'MECANICA REVENDEDOR', 'TIPO DE PRODUTO', 'MATCH'],\n",
|
||
" dtype='object')"
|
||
]
|
||
},
|
||
"execution_count": 10,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_similares.columns"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 11,
|
||
"id": "fe922f62",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_tabela = pd.read_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\BD_LANÇAMENTOS\\BOT\\BOT - C14\\arquivos para geração da sugestão\\TABELA DE PEDIDO\\Pedidos Semanais Especiais - BOT - 202514.xlsx\")\n",
|
||
"\n",
|
||
"df_tabela = df_tabela[df_tabela['Região'] == 'NNE'] \n",
|
||
"\n",
|
||
"df_tabela = df_tabela[(df_tabela['Canal'] != 'Ecomm') | (df_tabela['Canal'] != 'Ecomm | VD') | (df_tabela['Canal'] != 'Ecomm | Loja')] \n",
|
||
"\n",
|
||
"df_tabela['Canal'] = np.where((df_tabela['Canal'] == \"Loja\") | (df_tabela['Canal'] == \"Todos\") | (df_tabela['Canal'] == \"Loja | VD\"),\"TODOS\",\"VD\")\n",
|
||
"\n",
|
||
"df_tabela = df_tabela[df_tabela['Tipo de promoção'].str.contains('Lançamentos', na=False)]"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 12,
|
||
"id": "e0c55962",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_pdv = pd.read_excel(r\"C:\\Users\\joao.herculano\\Documents\\PDV_ATT.xlsx\")\n",
|
||
"df_pdv = df_pdv[~df_pdv['PDV'].isin(['910173', '910291'])]\n",
|
||
"\n",
|
||
"df_pdv_origi = pd.read_excel(r\"C:\\Users\\joao.herculano\\Documents\\PDV_ATT.xlsx\")\n",
|
||
"df_pdv_origi = df_pdv_origi[~df_pdv_origi['PDV'].isin(['910173', '910291'])]"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 13,
|
||
"id": "f93735d1",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<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>CANAL</th>\n",
|
||
" <th>DESCRIÇÃO</th>\n",
|
||
" <th>PDV DESC</th>\n",
|
||
" <th>REGIÃO</th>\n",
|
||
" <th>ESTADO</th>\n",
|
||
" <th>CIDADE</th>\n",
|
||
" <th>UF</th>\n",
|
||
" <th>MARCA</th>\n",
|
||
" <th>ANALISTA</th>\n",
|
||
" <th>GESTÃO</th>\n",
|
||
" <th>SUPERVISOR</th>\n",
|
||
" <th>STATUS</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>82</th>\n",
|
||
" <td>24293</td>\n",
|
||
" <td>HIB</td>\n",
|
||
" <td>COMERCIO-HIB MORRO DO CHAPEU</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>BA3</td>\n",
|
||
" <td>O BOTICARIO</td>\n",
|
||
" <td>MARCYARA</td>\n",
|
||
" <td>Alysson</td>\n",
|
||
" <td>Arianne Sodré [Provisório]</td>\n",
|
||
" <td>ATIVO</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" PDV CANAL DESCRIÇÃO PDV DESC REGIÃO ESTADO CIDADE \\\n",
|
||
"82 24293 HIB COMERCIO-HIB MORRO DO CHAPEU NaN NaN NaN NaN \n",
|
||
"\n",
|
||
" UF MARCA ANALISTA GESTÃO SUPERVISOR STATUS \n",
|
||
"82 BA3 O BOTICARIO MARCYARA Alysson Arianne Sodré [Provisório] ATIVO "
|
||
]
|
||
},
|
||
"execution_count": 13,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_pdv[df_pdv['PDV']==24293]"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 14,
|
||
"id": "a3a045d9",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"\n",
|
||
"\n",
|
||
"df_pdv = df_pdv.rename(columns={'DESCRIÇÃO':'DESCRIÇÃO PDV'})\n",
|
||
"\n",
|
||
"df_pdv = df_pdv.drop(columns=['REGIÃO', 'ESTADO','CIDADE','GESTÃO','MARCA'])\n",
|
||
"\n",
|
||
"df_pdv['UF'] = np.where(df_pdv['UF'] == 'VDC','BA',df_pdv['UF'])\n",
|
||
"\n",
|
||
"#ignorando a PDV que ainda não está online\n",
|
||
"df_pdv = df_pdv[df_pdv['DESCRIÇÃO PDV'] != '23813-COMERCIO-HIB VALENTE']\n",
|
||
"\n",
|
||
"df_pdv = df_pdv[df_pdv['STATUS'] != \"INATIVO\"]\n",
|
||
"\n",
|
||
"df_pdv = df_pdv[df_pdv['STATUS'] != \"MATRIZ\"]\n",
|
||
"\n",
|
||
"df_pdv = df_pdv[df_pdv['SUPERVISOR'] != 'Inativa']\n",
|
||
"\n",
|
||
"df_pdv['MATCH'] = 1"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 15,
|
||
"id": "df04a501",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_similares = pd.merge(left=df_similares,right=df_pdv,right_on=['MATCH'],left_on=['MATCH'],how='inner')\n",
|
||
"\n",
|
||
"df_similares = df_similares.drop_duplicates()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 16,
|
||
"id": "0da911af",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"(141690, 47)"
|
||
]
|
||
},
|
||
"execution_count": 16,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"# Caminho onde estão as subpastas com os arquivos CSV\n",
|
||
"\n",
|
||
"# Set the path to the folder containing CSV files\n",
|
||
"folder_path = r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\BD_LANÇAMENTOS\\BOT\\Bot - C13\\LANÇAMENTOS\\arquivos para geração da sugestão\\DRAFT\" # arquivo dos drafts\n",
|
||
"\n",
|
||
"# Pattern to match all CSV files\n",
|
||
"csv_files = glob.glob(os.path.join(folder_path, '*.csv'))\n",
|
||
"\n",
|
||
"# Read and concat all CSVs\n",
|
||
"df_draft = pd.concat([pd.read_csv(file) for file in csv_files], ignore_index=True)\n",
|
||
"\n",
|
||
"df_draft['match'] = 1 \n",
|
||
"\n",
|
||
"df_draft.shape\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 17,
|
||
"id": "0c8c7493",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_draft = df_draft.drop(columns=['Categoria'])"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 18,
|
||
"id": "91298cde",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"Index(['Histórico de Vendas do Ciclo 202410',\n",
|
||
" 'Histórico de Vendas do Ciclo 202411',\n",
|
||
" 'Histórico de Vendas do Ciclo 202412',\n",
|
||
" 'Histórico de Vendas do Ciclo 202413',\n",
|
||
" 'Histórico de Vendas do Ciclo 202414',\n",
|
||
" 'Histórico de Vendas do Ciclo 202415',\n",
|
||
" 'Histórico de Vendas do Ciclo 202416',\n",
|
||
" 'Histórico de Vendas do Ciclo 202417',\n",
|
||
" 'Histórico de Vendas do Ciclo 202501',\n",
|
||
" 'Histórico de Vendas do Ciclo 202502',\n",
|
||
" 'Histórico de Vendas do Ciclo 202503',\n",
|
||
" 'Histórico de Vendas do Ciclo 202504',\n",
|
||
" 'Histórico de Vendas do Ciclo 202505',\n",
|
||
" 'Histórico de Vendas do Ciclo 202506',\n",
|
||
" 'Histórico de Vendas do Ciclo 202507',\n",
|
||
" 'Histórico de Vendas do Ciclo 202508',\n",
|
||
" 'Histórico de Vendas do Ciclo 202509',\n",
|
||
" 'Histórico de Vendas do Ciclo Atual'],\n",
|
||
" dtype='object')"
|
||
]
|
||
},
|
||
"execution_count": 18,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_draft.columns[7:25]"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 19,
|
||
"id": "ed859826",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<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>Classe</th>\n",
|
||
" <th>SKU</th>\n",
|
||
" <th>Descrição</th>\n",
|
||
" <th>Subcategoria</th>\n",
|
||
" <th>Lançamento</th>\n",
|
||
" <th>Desativação</th>\n",
|
||
" <th>Histórico de Vendas do Ciclo 202410</th>\n",
|
||
" <th>Histórico de Vendas do Ciclo 202411</th>\n",
|
||
" <th>Histórico de Vendas do Ciclo 202412</th>\n",
|
||
" <th>...</th>\n",
|
||
" <th>Item Desativado</th>\n",
|
||
" <th>Data Prevista Regularização</th>\n",
|
||
" <th>Carteira Bloqueada Para Novos Pedidos</th>\n",
|
||
" <th>Planograma</th>\n",
|
||
" <th>Quantidade por caixa</th>\n",
|
||
" <th>Preço Sell In</th>\n",
|
||
" <th>Quantidade</th>\n",
|
||
" <th>Item analisado</th>\n",
|
||
" <th>Histórico de Vendas do Ciclo 202409</th>\n",
|
||
" <th>match</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>12</th>\n",
|
||
" <td>24293</td>\n",
|
||
" <td>C</td>\n",
|
||
" <td>49014</td>\n",
|
||
" <td>ACCORDES CREM DES HID CPO 200ml V2</td>\n",
|
||
" <td>CUIDADOS COM O CORPO</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>54</td>\n",
|
||
" <td>17.49</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>90</th>\n",
|
||
" <td>24293</td>\n",
|
||
" <td>C</td>\n",
|
||
" <td>49016</td>\n",
|
||
" <td>ACCORDES DES BDY SPR 100ml V6</td>\n",
|
||
" <td>DESODORANTE FEMININO</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>85</td>\n",
|
||
" <td>16.77</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>168</th>\n",
|
||
" <td>24293</td>\n",
|
||
" <td>B</td>\n",
|
||
" <td>48141</td>\n",
|
||
" <td>ACCORDES DES COL 80ml V5</td>\n",
|
||
" <td>PERFUMARIA FEMININA</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>41</td>\n",
|
||
" <td>63.24</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>246</th>\n",
|
||
" <td>24293</td>\n",
|
||
" <td>B</td>\n",
|
||
" <td>51213</td>\n",
|
||
" <td>ACCORDES DES COL HARMONIA 80ml V4</td>\n",
|
||
" <td>PERFUMARIA FEMININA</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>Baixo Atendimento</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>41</td>\n",
|
||
" <td>63.24</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>324</th>\n",
|
||
" <td>24293</td>\n",
|
||
" <td>E</td>\n",
|
||
" <td>86017</td>\n",
|
||
" <td>ARBO CREM PRE/POS BARBA 100g</td>\n",
|
||
" <td>PRÉ-BARBEAR</td>\n",
|
||
" <td>C08</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>80</td>\n",
|
||
" <td>18.41</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>...</th>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>141535</th>\n",
|
||
" <td>24293</td>\n",
|
||
" <td>E</td>\n",
|
||
" <td>50571</td>\n",
|
||
" <td>QDB SRUM FAC LEVANTA TUDO SKIN Q 30ml</td>\n",
|
||
" <td>HIDRATANTES E TRATAMENTOS</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>2025-08-18</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>99</td>\n",
|
||
" <td>31.64</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>141567</th>\n",
|
||
" <td>24293</td>\n",
|
||
" <td>E</td>\n",
|
||
" <td>50574</td>\n",
|
||
" <td>QDB SRUM FAC PREENCHE TUDO SKIN 30ml</td>\n",
|
||
" <td>HIDRATANTES E TRATAMENTOS</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>99</td>\n",
|
||
" <td>31.64</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>141599</th>\n",
|
||
" <td>24293</td>\n",
|
||
" <td>E</td>\n",
|
||
" <td>9403</td>\n",
|
||
" <td>QDB SRUM FAC TRIP COMB SKIN Q 30ml</td>\n",
|
||
" <td>HIDRATANTES E TRATAMENTOS</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>99</td>\n",
|
||
" <td>31.64</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>141629</th>\n",
|
||
" <td>24293</td>\n",
|
||
" <td>E</td>\n",
|
||
" <td>50568</td>\n",
|
||
" <td>QDB SRUM REST FAC ACORD/GLOW SKIN Q 30ml</td>\n",
|
||
" <td>HIDRATANTES E TRATAMENTOS</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>2025-07-16</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>99</td>\n",
|
||
" <td>27.32</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>141661</th>\n",
|
||
" <td>24293</td>\n",
|
||
" <td>E</td>\n",
|
||
" <td>53912</td>\n",
|
||
" <td>QDB TOALHA DEMAQ ALG</td>\n",
|
||
" <td>FUNCIONAIS MAQUIAGEM</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>84</td>\n",
|
||
" <td>17.77</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>2557 rows × 46 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" PDV Classe SKU Descrição \\\n",
|
||
"12 24293 C 49014 ACCORDES CREM DES HID CPO 200ml V2 \n",
|
||
"90 24293 C 49016 ACCORDES DES BDY SPR 100ml V6 \n",
|
||
"168 24293 B 48141 ACCORDES DES COL 80ml V5 \n",
|
||
"246 24293 B 51213 ACCORDES DES COL HARMONIA 80ml V4 \n",
|
||
"324 24293 E 86017 ARBO CREM PRE/POS BARBA 100g \n",
|
||
"... ... ... ... ... \n",
|
||
"141535 24293 E 50571 QDB SRUM FAC LEVANTA TUDO SKIN Q 30ml \n",
|
||
"141567 24293 E 50574 QDB SRUM FAC PREENCHE TUDO SKIN 30ml \n",
|
||
"141599 24293 E 9403 QDB SRUM FAC TRIP COMB SKIN Q 30ml \n",
|
||
"141629 24293 E 50568 QDB SRUM REST FAC ACORD/GLOW SKIN Q 30ml \n",
|
||
"141661 24293 E 53912 QDB TOALHA DEMAQ ALG \n",
|
||
"\n",
|
||
" Subcategoria Lançamento Desativação \\\n",
|
||
"12 CUIDADOS COM O CORPO NaN NaN \n",
|
||
"90 DESODORANTE FEMININO NaN NaN \n",
|
||
"168 PERFUMARIA FEMININA NaN NaN \n",
|
||
"246 PERFUMARIA FEMININA NaN NaN \n",
|
||
"324 PRÉ-BARBEAR C08 NaN \n",
|
||
"... ... ... ... \n",
|
||
"141535 HIDRATANTES E TRATAMENTOS NaN NaN \n",
|
||
"141567 HIDRATANTES E TRATAMENTOS NaN NaN \n",
|
||
"141599 HIDRATANTES E TRATAMENTOS NaN NaN \n",
|
||
"141629 HIDRATANTES E TRATAMENTOS NaN NaN \n",
|
||
"141661 FUNCIONAIS MAQUIAGEM NaN NaN \n",
|
||
"\n",
|
||
" Histórico de Vendas do Ciclo 202410 \\\n",
|
||
"12 0 \n",
|
||
"90 0 \n",
|
||
"168 0 \n",
|
||
"246 0 \n",
|
||
"324 0 \n",
|
||
"... ... \n",
|
||
"141535 0 \n",
|
||
"141567 0 \n",
|
||
"141599 0 \n",
|
||
"141629 0 \n",
|
||
"141661 0 \n",
|
||
"\n",
|
||
" Histórico de Vendas do Ciclo 202411 \\\n",
|
||
"12 0 \n",
|
||
"90 0 \n",
|
||
"168 0 \n",
|
||
"246 0 \n",
|
||
"324 0 \n",
|
||
"... ... \n",
|
||
"141535 0 \n",
|
||
"141567 0 \n",
|
||
"141599 0 \n",
|
||
"141629 0 \n",
|
||
"141661 0 \n",
|
||
"\n",
|
||
" Histórico de Vendas do Ciclo 202412 ... Item Desativado \\\n",
|
||
"12 0 ... Não \n",
|
||
"90 0 ... Não \n",
|
||
"168 0 ... Não \n",
|
||
"246 0 ... Não \n",
|
||
"324 0 ... Não \n",
|
||
"... ... ... ... \n",
|
||
"141535 0 ... Não \n",
|
||
"141567 0 ... Não \n",
|
||
"141599 0 ... Não \n",
|
||
"141629 0 ... Não \n",
|
||
"141661 0 ... Não \n",
|
||
"\n",
|
||
" Data Prevista Regularização Carteira Bloqueada Para Novos Pedidos \\\n",
|
||
"12 0 Não \n",
|
||
"90 0 Não \n",
|
||
"168 0 Não \n",
|
||
"246 Baixo Atendimento Não \n",
|
||
"324 0 Não \n",
|
||
"... ... ... \n",
|
||
"141535 2025-08-18 Não \n",
|
||
"141567 0 Não \n",
|
||
"141599 0 Não \n",
|
||
"141629 2025-07-16 Não \n",
|
||
"141661 0 Não \n",
|
||
"\n",
|
||
" Planograma Quantidade por caixa Preço Sell In Quantidade \\\n",
|
||
"12 0.0 54 17.49 0 \n",
|
||
"90 0.0 85 16.77 0 \n",
|
||
"168 0.0 41 63.24 0 \n",
|
||
"246 0.0 41 63.24 0 \n",
|
||
"324 0.0 80 18.41 0 \n",
|
||
"... ... ... ... ... \n",
|
||
"141535 0.0 99 31.64 0 \n",
|
||
"141567 0.0 99 31.64 0 \n",
|
||
"141599 0.0 99 31.64 0 \n",
|
||
"141629 0.0 99 27.32 0 \n",
|
||
"141661 0.0 84 17.77 0 \n",
|
||
"\n",
|
||
" Item analisado Histórico de Vendas do Ciclo 202409 match \n",
|
||
"12 Não NaN 1 \n",
|
||
"90 Não NaN 1 \n",
|
||
"168 Não NaN 1 \n",
|
||
"246 Não NaN 1 \n",
|
||
"324 Não NaN 1 \n",
|
||
"... ... ... ... \n",
|
||
"141535 Não 0.0 1 \n",
|
||
"141567 Não 0.0 1 \n",
|
||
"141599 Não 0.0 1 \n",
|
||
"141629 Não 0.0 1 \n",
|
||
"141661 Não 0.0 1 \n",
|
||
"\n",
|
||
"[2557 rows x 46 columns]"
|
||
]
|
||
},
|
||
"execution_count": 19,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_draft[df_draft['PDV']==24293]"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 20,
|
||
"id": "34e179cb",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"C:\\Users\\joao.herculano\\AppData\\Local\\Temp\\ipykernel_101180\\1463083786.py:24: DeprecationWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.\n",
|
||
" crescimento_por_pdv = df_draft.groupby('PDV').apply(calcular_crescimento)\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"# Define as colunas mensais\n",
|
||
"colunas_mensais = df_draft.columns[7:25]\n",
|
||
"\n",
|
||
"# Agrupa por PDV e calcula crescimento médio por PDV\n",
|
||
"def calcular_crescimento(grupo):\n",
|
||
" soma_mensal = grupo[colunas_mensais].sum() # soma por mês\n",
|
||
" variacao_mensal = soma_mensal.pct_change().dropna() # variação percentual mês a mês\n",
|
||
" variacao_mensal = variacao_mensal[np.isfinite(variacao_mensal)]\n",
|
||
"\n",
|
||
" if len(variacao_mensal) == 0:\n",
|
||
" return pd.Series({'CRESCIMENTO': np.nan})\n",
|
||
"\n",
|
||
" media = variacao_mensal.mean()\n",
|
||
" desvio = variacao_mensal.std()\n",
|
||
"\n",
|
||
" limite_sup = media + 2 * desvio\n",
|
||
" limite_inf = media - 2 * desvio\n",
|
||
"\n",
|
||
" variacoes_filtradas = variacao_mensal[variacao_mensal.between(limite_inf, limite_sup)]\n",
|
||
" crescimento = round(variacoes_filtradas.mean(), 4)\n",
|
||
" return pd.Series({'CRESCIMENTO': crescimento})\n",
|
||
"\n",
|
||
"# Aplica a função por PDV\n",
|
||
"crescimento_por_pdv = df_draft.groupby('PDV').apply(calcular_crescimento)\n",
|
||
"\n",
|
||
"# Merge do resultado de volta no dataframe original\n",
|
||
"df_draft = df_draft.merge(crescimento_por_pdv, on='PDV', how='left')\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 21,
|
||
"id": "94aa432f",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"0 52004\n",
|
||
"1 52004\n",
|
||
"2 52004\n",
|
||
"3 52004\n",
|
||
"4 52004\n",
|
||
"Name: PRODUTO SIMILAR, dtype: Int64"
|
||
]
|
||
},
|
||
"execution_count": 21,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_similares['PRODUTO SIMILAR'] = df_similares['PRODUTO SIMILAR'].astype('Int64')\n",
|
||
"df_similares['PRODUTO SIMILAR'].head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 22,
|
||
"id": "4bc8c2b4",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_similares['PDV'] = df_similares['PDV'].astype('Int64')\n",
|
||
"\n",
|
||
"df_final = pd.merge(left=df_similares,right=df_draft,right_on=['PDV', 'SKU'],left_on=['PDV','PRODUTO SIMILAR'],how='left')"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 23,
|
||
"id": "aae416dd",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<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>PRODUTO LANÇAMENTO</th>\n",
|
||
" <th>DESCRIÇÃO DO LANÇAMENTO</th>\n",
|
||
" <th>PRODUTO SIMILAR</th>\n",
|
||
" <th>DESCRIÇÃO SIMILAR</th>\n",
|
||
" <th>CICLO SIMILAR</th>\n",
|
||
" <th>FOCO</th>\n",
|
||
" <th>IAF</th>\n",
|
||
" <th>CATEGORIA</th>\n",
|
||
" <th>MARCA</th>\n",
|
||
" <th>% CONSUMIDOR</th>\n",
|
||
" <th>...</th>\n",
|
||
" <th>Data Prevista Regularização</th>\n",
|
||
" <th>Carteira Bloqueada Para Novos Pedidos</th>\n",
|
||
" <th>Planograma</th>\n",
|
||
" <th>Quantidade por caixa</th>\n",
|
||
" <th>Preço Sell In</th>\n",
|
||
" <th>Quantidade</th>\n",
|
||
" <th>Item analisado</th>\n",
|
||
" <th>Histórico de Vendas do Ciclo 202409</th>\n",
|
||
" <th>match</th>\n",
|
||
" <th>CRESCIMENTO</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>59823</td>\n",
|
||
" <td>NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>NSPA LOC RAD DES HID CPO AMEI DOUR 400ml</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>CUIDADOS COM A PELE</td>\n",
|
||
" <td>NATIVA SPA</td>\n",
|
||
" <td>31,07 | 39,52</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>3.0</td>\n",
|
||
" <td>30.0</td>\n",
|
||
" <td>23.62</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>-0.0154</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>59823</td>\n",
|
||
" <td>NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>NSPA LOC RAD DES HID CPO AMEI DOUR 400ml</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>CUIDADOS COM A PELE</td>\n",
|
||
" <td>NATIVA SPA</td>\n",
|
||
" <td>31,07 | 39,52</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>3.0</td>\n",
|
||
" <td>30.0</td>\n",
|
||
" <td>23.62</td>\n",
|
||
" <td>9.0</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>-0.0341</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>59823</td>\n",
|
||
" <td>NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>NSPA LOC RAD DES HID CPO AMEI DOUR 400ml</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>CUIDADOS COM A PELE</td>\n",
|
||
" <td>NATIVA SPA</td>\n",
|
||
" <td>31,07 | 39,52</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>3.0</td>\n",
|
||
" <td>30.0</td>\n",
|
||
" <td>23.62</td>\n",
|
||
" <td>4.0</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>-0.0138</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>59823</td>\n",
|
||
" <td>NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>NSPA LOC RAD DES HID CPO AMEI DOUR 400ml</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>CUIDADOS COM A PELE</td>\n",
|
||
" <td>NATIVA SPA</td>\n",
|
||
" <td>31,07 | 39,52</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>30.0</td>\n",
|
||
" <td>23.62</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>-0.0595</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>59823</td>\n",
|
||
" <td>NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>NSPA LOC RAD DES HID CPO AMEI DOUR 400ml</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>CUIDADOS COM A PELE</td>\n",
|
||
" <td>NATIVA SPA</td>\n",
|
||
" <td>31,07 | 39,52</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>3.0</td>\n",
|
||
" <td>30.0</td>\n",
|
||
" <td>23.62</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>-0.0171</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>...</th>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2286</th>\n",
|
||
" <td>87771</td>\n",
|
||
" <td>MAKE B BLUSH COMP BERRY MINI PRM 1,5g</td>\n",
|
||
" <td>87771</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>SUPORTE À VENDA</td>\n",
|
||
" <td>MAKE B.</td>\n",
|
||
" <td>-</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2287</th>\n",
|
||
" <td>87771</td>\n",
|
||
" <td>MAKE B BLUSH COMP BERRY MINI PRM 1,5g</td>\n",
|
||
" <td>87771</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>SUPORTE À VENDA</td>\n",
|
||
" <td>MAKE B.</td>\n",
|
||
" <td>-</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2288</th>\n",
|
||
" <td>87771</td>\n",
|
||
" <td>MAKE B BLUSH COMP BERRY MINI PRM 1,5g</td>\n",
|
||
" <td>87771</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>SUPORTE À VENDA</td>\n",
|
||
" <td>MAKE B.</td>\n",
|
||
" <td>-</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2289</th>\n",
|
||
" <td>87771</td>\n",
|
||
" <td>MAKE B BLUSH COMP BERRY MINI PRM 1,5g</td>\n",
|
||
" <td>87771</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>SUPORTE À VENDA</td>\n",
|
||
" <td>MAKE B.</td>\n",
|
||
" <td>-</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2290</th>\n",
|
||
" <td>87771</td>\n",
|
||
" <td>MAKE B BLUSH COMP BERRY MINI PRM 1,5g</td>\n",
|
||
" <td>87771</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>SUPORTE À VENDA</td>\n",
|
||
" <td>MAKE B.</td>\n",
|
||
" <td>-</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>2291 rows × 69 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" PRODUTO LANÇAMENTO DESCRIÇÃO DO LANÇAMENTO \\\n",
|
||
"0 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n",
|
||
"1 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n",
|
||
"2 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n",
|
||
"3 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n",
|
||
"4 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n",
|
||
"... ... ... \n",
|
||
"2286 87771 MAKE B BLUSH COMP BERRY MINI PRM 1,5g \n",
|
||
"2287 87771 MAKE B BLUSH COMP BERRY MINI PRM 1,5g \n",
|
||
"2288 87771 MAKE B BLUSH COMP BERRY MINI PRM 1,5g \n",
|
||
"2289 87771 MAKE B BLUSH COMP BERRY MINI PRM 1,5g \n",
|
||
"2290 87771 MAKE B BLUSH COMP BERRY MINI PRM 1,5g \n",
|
||
"\n",
|
||
" PRODUTO SIMILAR DESCRIÇÃO SIMILAR CICLO SIMILAR \\\n",
|
||
"0 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n",
|
||
"1 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n",
|
||
"2 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n",
|
||
"3 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n",
|
||
"4 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n",
|
||
"... ... ... ... \n",
|
||
"2286 87771 0 0 \n",
|
||
"2287 87771 0 0 \n",
|
||
"2288 87771 0 0 \n",
|
||
"2289 87771 0 0 \n",
|
||
"2290 87771 0 0 \n",
|
||
"\n",
|
||
" FOCO IAF CATEGORIA MARCA % CONSUMIDOR ... \\\n",
|
||
"0 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... \n",
|
||
"1 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... \n",
|
||
"2 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... \n",
|
||
"3 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... \n",
|
||
"4 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... \n",
|
||
"... ... ... ... ... ... ... \n",
|
||
"2286 Não Não SUPORTE À VENDA MAKE B. - ... \n",
|
||
"2287 Não Não SUPORTE À VENDA MAKE B. - ... \n",
|
||
"2288 Não Não SUPORTE À VENDA MAKE B. - ... \n",
|
||
"2289 Não Não SUPORTE À VENDA MAKE B. - ... \n",
|
||
"2290 Não Não SUPORTE À VENDA MAKE B. - ... \n",
|
||
"\n",
|
||
" Data Prevista Regularização Carteira Bloqueada Para Novos Pedidos \\\n",
|
||
"0 0 Não \n",
|
||
"1 0 Não \n",
|
||
"2 0 Não \n",
|
||
"3 0 Não \n",
|
||
"4 0 Não \n",
|
||
"... ... ... \n",
|
||
"2286 NaN NaN \n",
|
||
"2287 NaN NaN \n",
|
||
"2288 NaN NaN \n",
|
||
"2289 NaN NaN \n",
|
||
"2290 NaN NaN \n",
|
||
"\n",
|
||
" Planograma Quantidade por caixa Preço Sell In Quantidade \\\n",
|
||
"0 3.0 30.0 23.62 0.0 \n",
|
||
"1 3.0 30.0 23.62 9.0 \n",
|
||
"2 3.0 30.0 23.62 4.0 \n",
|
||
"3 0.0 30.0 23.62 0.0 \n",
|
||
"4 3.0 30.0 23.62 1.0 \n",
|
||
"... ... ... ... ... \n",
|
||
"2286 NaN NaN NaN NaN \n",
|
||
"2287 NaN NaN NaN NaN \n",
|
||
"2288 NaN NaN NaN NaN \n",
|
||
"2289 NaN NaN NaN NaN \n",
|
||
"2290 NaN NaN NaN NaN \n",
|
||
"\n",
|
||
" Item analisado Histórico de Vendas do Ciclo 202409 match CRESCIMENTO \n",
|
||
"0 Não NaN 1.0 -0.0154 \n",
|
||
"1 Não NaN 1.0 -0.0341 \n",
|
||
"2 Não NaN 1.0 -0.0138 \n",
|
||
"3 Não NaN 1.0 -0.0595 \n",
|
||
"4 Não NaN 1.0 -0.0171 \n",
|
||
"... ... ... ... ... \n",
|
||
"2286 NaN NaN NaN NaN \n",
|
||
"2287 NaN NaN NaN NaN \n",
|
||
"2288 NaN NaN NaN NaN \n",
|
||
"2289 NaN NaN NaN NaN \n",
|
||
"2290 NaN NaN NaN NaN \n",
|
||
"\n",
|
||
"[2291 rows x 69 columns]"
|
||
]
|
||
},
|
||
"execution_count": 23,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_final"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 24,
|
||
"id": "2c9f011d",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"PRODUTO SIMILAR\n",
|
||
"52004 79\n",
|
||
"52008 79\n",
|
||
"52005 79\n",
|
||
"72929 79\n",
|
||
"53389 79\n",
|
||
"57474 79\n",
|
||
"52012 79\n",
|
||
"58138 79\n",
|
||
"49973 79\n",
|
||
"1006 79\n",
|
||
"53342 79\n",
|
||
"47963 79\n",
|
||
"84056 79\n",
|
||
"25458 79\n",
|
||
"48136 79\n",
|
||
"51448 79\n",
|
||
"1004 79\n",
|
||
"58373 79\n",
|
||
"75792 79\n",
|
||
"55659 79\n",
|
||
"48635 79\n",
|
||
"48621 79\n",
|
||
"59306 79\n",
|
||
"49225 79\n",
|
||
"49228 79\n",
|
||
"57759 79\n",
|
||
"55766 79\n",
|
||
"87000 79\n",
|
||
"87771 79\n",
|
||
"Name: count, dtype: Int64"
|
||
]
|
||
},
|
||
"execution_count": 24,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_similares= df_similares[df_similares['PRODUTO SIMILAR'].notna()]\n",
|
||
"\n",
|
||
"df_similares['PRODUTO SIMILAR'].value_counts()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 25,
|
||
"id": "0ff66803",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"SKU\n",
|
||
"52004.0 77\n",
|
||
"52008.0 77\n",
|
||
"52005.0 77\n",
|
||
"53389.0 77\n",
|
||
"52012.0 77\n",
|
||
"58138.0 77\n",
|
||
"49973.0 77\n",
|
||
"47963.0 77\n",
|
||
"84056.0 77\n",
|
||
"25458.0 77\n",
|
||
"48136.0 77\n",
|
||
"51448.0 77\n",
|
||
"1004.0 77\n",
|
||
"75792.0 77\n",
|
||
"55659.0 77\n",
|
||
"48635.0 77\n",
|
||
"48621.0 77\n",
|
||
"59306.0 77\n",
|
||
"57759.0 77\n",
|
||
"55766.0 77\n",
|
||
"Name: count, dtype: int64"
|
||
]
|
||
},
|
||
"execution_count": 25,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_final['SKU'].value_counts()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 26,
|
||
"id": "c1451562",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"#df_venda_diaria = pd.read_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\BD_LANÇAMENTOS\\BOT\\BOT - C12\\LANÇAMENTOS\\arquivos para geração da sugestão\\VENDAS_DIARIAS\\FormFiltroConsultaVendaSintetica_17_06_2025_14_04_40.xls\")\n",
|
||
"#df_venda_diaria.shape"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 27,
|
||
"id": "64bde00b",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_venda_diaria = pd.read_csv(\n",
|
||
" r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\BD_LANÇAMENTOS\\BOT\\BOT - C15\\arquivos para geração da sugestão\\VENDAS_DIARIAS\\vendas 20250815.csv\",\n",
|
||
" sep=';',\n",
|
||
" dtype={'SKU_2': str},decimal=',')"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 28,
|
||
"id": "6ab155b5",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_venda_diaria['VENDAS_CICLO'] = df_venda_diaria['VENDAS_CICLO'].str.replace(r'\\.', '', regex=True)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 29,
|
||
"id": "1d25e5df",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<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>12522</td>\n",
|
||
" <td>51.944</td>\n",
|
||
" <td>COFFEE DES COL MAN SEDUC TCH PRM 10ml</td>\n",
|
||
" <td>11</td>\n",
|
||
" <td>C202307</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>20998</td>\n",
|
||
" <td>77.557</td>\n",
|
||
" <td>QDB BASE LIQ SUPERMAT COR 06 Q 30ml RPCK</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>C202405</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>20858</td>\n",
|
||
" <td>74.103</td>\n",
|
||
" <td>GLAMOUR DES COL SEC BL 75ml V4</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>C202409</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>5699</td>\n",
|
||
" <td>47.950</td>\n",
|
||
" <td>ZAAD EDP 95ml V6</td>\n",
|
||
" <td>12</td>\n",
|
||
" <td>C202406</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>20993</td>\n",
|
||
" <td>50.297</td>\n",
|
||
" <td>ESTJ DEM LILY ESSENCE 4x4ml</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>C202416</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" PDV SKU DESCRICAO VENDAS_CICLO \\\n",
|
||
"0 12522 51.944 COFFEE DES COL MAN SEDUC TCH PRM 10ml 11 \n",
|
||
"1 20998 77.557 QDB BASE LIQ SUPERMAT COR 06 Q 30ml RPCK 1 \n",
|
||
"2 20858 74.103 GLAMOUR DES COL SEC BL 75ml V4 5 \n",
|
||
"3 5699 47.950 ZAAD EDP 95ml V6 12 \n",
|
||
"4 20993 50.297 ESTJ DEM LILY ESSENCE 4x4ml 2 \n",
|
||
"\n",
|
||
" Ciclo \n",
|
||
"0 C202307 \n",
|
||
"1 C202405 \n",
|
||
"2 C202409 \n",
|
||
"3 C202406 \n",
|
||
"4 C202416 "
|
||
]
|
||
},
|
||
"execution_count": 29,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_venda_diaria.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 30,
|
||
"id": "5d0d79f2",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<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_Total</th>\n",
|
||
" <th>Ciclo</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>12522</td>\n",
|
||
" <td>51.944</td>\n",
|
||
" <td>COFFEE DES COL MAN SEDUC TCH PRM 10ml</td>\n",
|
||
" <td>11</td>\n",
|
||
" <td>C202307</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>20998</td>\n",
|
||
" <td>77.557</td>\n",
|
||
" <td>QDB BASE LIQ SUPERMAT COR 06 Q 30ml RPCK</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>C202405</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>20858</td>\n",
|
||
" <td>74.103</td>\n",
|
||
" <td>GLAMOUR DES COL SEC BL 75ml V4</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>C202409</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>5699</td>\n",
|
||
" <td>47.950</td>\n",
|
||
" <td>ZAAD EDP 95ml V6</td>\n",
|
||
" <td>12</td>\n",
|
||
" <td>C202406</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>20993</td>\n",
|
||
" <td>50.297</td>\n",
|
||
" <td>ESTJ DEM LILY ESSENCE 4x4ml</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>C202416</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" PDV SKU DESCRICAO Vendas_Total \\\n",
|
||
"0 12522 51.944 COFFEE DES COL MAN SEDUC TCH PRM 10ml 11 \n",
|
||
"1 20998 77.557 QDB BASE LIQ SUPERMAT COR 06 Q 30ml RPCK 1 \n",
|
||
"2 20858 74.103 GLAMOUR DES COL SEC BL 75ml V4 5 \n",
|
||
"3 5699 47.950 ZAAD EDP 95ml V6 12 \n",
|
||
"4 20993 50.297 ESTJ DEM LILY ESSENCE 4x4ml 2 \n",
|
||
"\n",
|
||
" Ciclo \n",
|
||
"0 C202307 \n",
|
||
"1 C202405 \n",
|
||
"2 C202409 \n",
|
||
"3 C202406 \n",
|
||
"4 C202416 "
|
||
]
|
||
},
|
||
"execution_count": 30,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"#df_venda_diaria['Ciclo'] = df_venda_diaria['Ciclo'].str.replace(\"C\",\"C20\") \n",
|
||
"\n",
|
||
"df_venda_diaria = df_venda_diaria.rename(columns={'VENDAS_CICLO':'Vendas_Total'})\n",
|
||
"\n",
|
||
"df_venda_diaria.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 31,
|
||
"id": "a93427da",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<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_Total</th>\n",
|
||
" <th>Ciclo</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>12522</td>\n",
|
||
" <td>51.944</td>\n",
|
||
" <td>COFFEE DES COL MAN SEDUC TCH PRM 10ml</td>\n",
|
||
" <td>11</td>\n",
|
||
" <td>C202307</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>20998</td>\n",
|
||
" <td>77.557</td>\n",
|
||
" <td>QDB BASE LIQ SUPERMAT COR 06 Q 30ml RPCK</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>C202405</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>20858</td>\n",
|
||
" <td>74.103</td>\n",
|
||
" <td>GLAMOUR DES COL SEC BL 75ml V4</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>C202409</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>5699</td>\n",
|
||
" <td>47.950</td>\n",
|
||
" <td>ZAAD EDP 95ml V6</td>\n",
|
||
" <td>12</td>\n",
|
||
" <td>C202406</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>20993</td>\n",
|
||
" <td>50.297</td>\n",
|
||
" <td>ESTJ DEM LILY ESSENCE 4x4ml</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>C202416</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" PDV SKU DESCRICAO Vendas_Total \\\n",
|
||
"0 12522 51.944 COFFEE DES COL MAN SEDUC TCH PRM 10ml 11 \n",
|
||
"1 20998 77.557 QDB BASE LIQ SUPERMAT COR 06 Q 30ml RPCK 1 \n",
|
||
"2 20858 74.103 GLAMOUR DES COL SEC BL 75ml V4 5 \n",
|
||
"3 5699 47.950 ZAAD EDP 95ml V6 12 \n",
|
||
"4 20993 50.297 ESTJ DEM LILY ESSENCE 4x4ml 2 \n",
|
||
"\n",
|
||
" Ciclo \n",
|
||
"0 C202307 \n",
|
||
"1 C202405 \n",
|
||
"2 C202409 \n",
|
||
"3 C202406 \n",
|
||
"4 C202416 "
|
||
]
|
||
},
|
||
"execution_count": 31,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_venda_diaria['Vendas_Total'] = df_venda_diaria['Vendas_Total'].str.replace(',', '.', regex=False)\n",
|
||
"\n",
|
||
"df_venda_diaria['Vendas_Total'] = df_venda_diaria['Vendas_Total'].astype('float')\n",
|
||
"\n",
|
||
"df_venda_diaria['Vendas_Total'] = round(df_venda_diaria['Vendas_Total'],0)\n",
|
||
"\n",
|
||
"df_venda_diaria['Vendas_Total'] = df_venda_diaria['Vendas_Total'].astype(str)\n",
|
||
"\n",
|
||
"df_venda_diaria['Vendas_Total'] = (\n",
|
||
" df_venda_diaria['Vendas_Total']\n",
|
||
" .str.replace('.0', '', regex=False)\n",
|
||
" .str.replace('.', '', regex=False)\n",
|
||
" .astype('Int64')\n",
|
||
")\n",
|
||
"\n",
|
||
"\n",
|
||
"df_venda_diaria.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 32,
|
||
"id": "6ddec856",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<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_Total</th>\n",
|
||
" <th>Ciclo</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>12522</td>\n",
|
||
" <td>51.944</td>\n",
|
||
" <td>COFFEE DES COL MAN SEDUC TCH PRM 10ml</td>\n",
|
||
" <td>11</td>\n",
|
||
" <td>C202307</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>20998</td>\n",
|
||
" <td>77.557</td>\n",
|
||
" <td>QDB BASE LIQ SUPERMAT COR 06 Q 30ml RPCK</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>C202405</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>20858</td>\n",
|
||
" <td>74.103</td>\n",
|
||
" <td>GLAMOUR DES COL SEC BL 75ml V4</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>C202409</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>5699</td>\n",
|
||
" <td>47.950</td>\n",
|
||
" <td>ZAAD EDP 95ml V6</td>\n",
|
||
" <td>12</td>\n",
|
||
" <td>C202406</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>20993</td>\n",
|
||
" <td>50.297</td>\n",
|
||
" <td>ESTJ DEM LILY ESSENCE 4x4ml</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>C202416</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" PDV SKU DESCRICAO Vendas_Total \\\n",
|
||
"0 12522 51.944 COFFEE DES COL MAN SEDUC TCH PRM 10ml 11 \n",
|
||
"1 20998 77.557 QDB BASE LIQ SUPERMAT COR 06 Q 30ml RPCK 1 \n",
|
||
"2 20858 74.103 GLAMOUR DES COL SEC BL 75ml V4 5 \n",
|
||
"3 5699 47.950 ZAAD EDP 95ml V6 12 \n",
|
||
"4 20993 50.297 ESTJ DEM LILY ESSENCE 4x4ml 2 \n",
|
||
"\n",
|
||
" Ciclo \n",
|
||
"0 C202307 \n",
|
||
"1 C202405 \n",
|
||
"2 C202409 \n",
|
||
"3 C202406 \n",
|
||
"4 C202416 "
|
||
]
|
||
},
|
||
"execution_count": 32,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_venda_diaria2 = df_venda_diaria.pivot_table(\n",
|
||
" index=[\"PDV\", \"SKU\", \"DESCRICAO\"],\n",
|
||
" columns=\"Ciclo\",\n",
|
||
" values=\"Vendas_Total\",\n",
|
||
" fill_value=0\n",
|
||
").reset_index()\n",
|
||
"\n",
|
||
"# Se quiser, reorganize as colunas colocando os ciclos ao final\n",
|
||
"df_venda_diaria.columns.name = None\n",
|
||
"\n",
|
||
"df_venda_diaria.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 33,
|
||
"id": "882e68aa",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"Index(['PDV', 'SKU', 'DESCRICAO', 'Vendas_Total', 'Ciclo'], dtype='object')"
|
||
]
|
||
},
|
||
"execution_count": 33,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_venda_diaria.columns"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 34,
|
||
"id": "0c288d75",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<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_Total</th>\n",
|
||
" <th>Ciclo</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>12522</td>\n",
|
||
" <td>51.944</td>\n",
|
||
" <td>COFFEE DES COL MAN SEDUC TCH PRM 10ml</td>\n",
|
||
" <td>11</td>\n",
|
||
" <td>C202307</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>20998</td>\n",
|
||
" <td>77.557</td>\n",
|
||
" <td>QDB BASE LIQ SUPERMAT COR 06 Q 30ml RPCK</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>C202405</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>20858</td>\n",
|
||
" <td>74.103</td>\n",
|
||
" <td>GLAMOUR DES COL SEC BL 75ml V4</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>C202409</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>5699</td>\n",
|
||
" <td>47.950</td>\n",
|
||
" <td>ZAAD EDP 95ml V6</td>\n",
|
||
" <td>12</td>\n",
|
||
" <td>C202406</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>20993</td>\n",
|
||
" <td>50.297</td>\n",
|
||
" <td>ESTJ DEM LILY ESSENCE 4x4ml</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>C202416</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>...</th>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1663315</th>\n",
|
||
" <td>20996</td>\n",
|
||
" <td>83.039</td>\n",
|
||
" <td>QUASAR DES COL RUSH 100ml</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>C202415</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1663316</th>\n",
|
||
" <td>20970</td>\n",
|
||
" <td>52.025</td>\n",
|
||
" <td>BOTI BABY SAB LIQ GLIC V2 400ml</td>\n",
|
||
" <td>6</td>\n",
|
||
" <td>C202511</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1663317</th>\n",
|
||
" <td>20996</td>\n",
|
||
" <td>93.069</td>\n",
|
||
" <td>LA PIEL D/COL SPR CP PER AMBR DOUR 200ml</td>\n",
|
||
" <td>10</td>\n",
|
||
" <td>C202414</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1663318</th>\n",
|
||
" <td>13427</td>\n",
|
||
" <td>51.279</td>\n",
|
||
" <td>MAKE B BAS LIQ C/ GLYC TX 140 30g</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>C202309</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1663319</th>\n",
|
||
" <td>21278</td>\n",
|
||
" <td>52.014</td>\n",
|
||
" <td>CJ FLAC OUI EDP ICONIQUE INTENSE 3x1ml</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>C202511</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>1663320 rows × 5 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" PDV SKU DESCRICAO \\\n",
|
||
"0 12522 51.944 COFFEE DES COL MAN SEDUC TCH PRM 10ml \n",
|
||
"1 20998 77.557 QDB BASE LIQ SUPERMAT COR 06 Q 30ml RPCK \n",
|
||
"2 20858 74.103 GLAMOUR DES COL SEC BL 75ml V4 \n",
|
||
"3 5699 47.950 ZAAD EDP 95ml V6 \n",
|
||
"4 20993 50.297 ESTJ DEM LILY ESSENCE 4x4ml \n",
|
||
"... ... ... ... \n",
|
||
"1663315 20996 83.039 QUASAR DES COL RUSH 100ml \n",
|
||
"1663316 20970 52.025 BOTI BABY SAB LIQ GLIC V2 400ml \n",
|
||
"1663317 20996 93.069 LA PIEL D/COL SPR CP PER AMBR DOUR 200ml \n",
|
||
"1663318 13427 51.279 MAKE B BAS LIQ C/ GLYC TX 140 30g \n",
|
||
"1663319 21278 52.014 CJ FLAC OUI EDP ICONIQUE INTENSE 3x1ml \n",
|
||
"\n",
|
||
" Vendas_Total Ciclo \n",
|
||
"0 11 C202307 \n",
|
||
"1 1 C202405 \n",
|
||
"2 5 C202409 \n",
|
||
"3 12 C202406 \n",
|
||
"4 2 C202416 \n",
|
||
"... ... ... \n",
|
||
"1663315 1 C202415 \n",
|
||
"1663316 6 C202511 \n",
|
||
"1663317 10 C202414 \n",
|
||
"1663318 1 C202309 \n",
|
||
"1663319 2 C202511 \n",
|
||
"\n",
|
||
"[1663320 rows x 5 columns]"
|
||
]
|
||
},
|
||
"execution_count": 34,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_venda_diaria"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 35,
|
||
"id": "c7ddaf20",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"#df_venda_diaria['PDV'] = df_venda_diaria['Unidade de Negócio'].str.split(\"-\").str[0].str.strip()\n",
|
||
"\n",
|
||
"#df_venda_diaria['Dia'] = pd.to_datetime(df_venda_diaria['Dia'], format='%d/%m/%Y')\n",
|
||
"\n",
|
||
"#df_venda_diaria = pd.merge(left=df_venda_diaria,right=calendario[['Ciclo','Date']],left_on='Dia',right_on='Date',how='inner')\n",
|
||
"\n",
|
||
"#df_venda_diaria = df_venda_diaria.drop(columns='Date')\n",
|
||
"\n",
|
||
"#df_venda_diaria.shape"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 36,
|
||
"id": "7119556a",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# 'Dia' já está em formato datetime, então renomeamos para 'Data' diretamente\n",
|
||
"# ou apenas usamos 'Dia' como referência de data\n",
|
||
"\n",
|
||
"# Ordena o DataFrame para garantir que a cumulativa funcione corretamente\n",
|
||
"#df_venda_diaria = df_venda_diaria.sort_values(by=['Unidade de Negócio', 'Código do Produto', 'Dia'])\n",
|
||
"\n",
|
||
"# Calcula a quantidade acumulada até o dia para cada grupo\n",
|
||
"#df_venda_diaria['Quantidade Acumulada'] = (df_venda_diaria.groupby(['Unidade de Negócio', 'Código do Produto'])['Quantidade'].cumsum()) # acumulado por grupo até a data da linha\n",
|
||
"\n",
|
||
"#df_venda_diaria.shape"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 37,
|
||
"id": "c707a1b6",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"#df_venda_diaria = df_venda_diaria.drop_duplicates()\n",
|
||
"\n",
|
||
"#df_venda_agrupado = df_venda_diaria.fillna(0).groupby(['PDV', 'Código do Produto','Ciclo'])['Quantidade Acumulada'].max().reset_index()\n",
|
||
"#df_venda_agrupado"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 38,
|
||
"id": "083ff829",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"#df_venda_agrupado[(df_venda_agrupado['Ciclo']=='C202213')&(df_venda_agrupado['Código do Produto']==81054)&(df_venda_agrupado['PDV']=='20994')]"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 39,
|
||
"id": "59707396",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"#df_venda_agrupado[['Ciclo','Código do Produto','PDV']].dtypes"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 40,
|
||
"id": "bdf6abbb",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"CICLO SIMILAR object\n",
|
||
"PRODUTO SIMILAR Int64\n",
|
||
"PDV Int64\n",
|
||
"dtype: object"
|
||
]
|
||
},
|
||
"execution_count": 40,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_final[['CICLO SIMILAR','PRODUTO SIMILAR','PDV']].dtypes"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 41,
|
||
"id": "dc452c72",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"(2291, 75)"
|
||
]
|
||
},
|
||
"execution_count": 41,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_final = pd.merge(left=df_final, right=filtered_calendario[['Ciclo','INICIO CICLO','FIM CICLO','DURAÇÃO','match','dias_ate_inicio']], right_on='match',left_on='MATCH',how='left')\n",
|
||
"df_final.shape"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 42,
|
||
"id": "c260e0e3",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"#df_final = df_final.drop(columns=['PDV DESC','status','SKU','Descrição','Lançamento','Item analisado','Planograma','Quantidade por caixa'])"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 43,
|
||
"id": "c9de258b",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<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>PRODUTO LANÇAMENTO</th>\n",
|
||
" <th>DESCRIÇÃO DO LANÇAMENTO</th>\n",
|
||
" <th>PRODUTO SIMILAR</th>\n",
|
||
" <th>DESCRIÇÃO SIMILAR</th>\n",
|
||
" <th>CICLO SIMILAR</th>\n",
|
||
" <th>FOCO</th>\n",
|
||
" <th>IAF</th>\n",
|
||
" <th>CATEGORIA</th>\n",
|
||
" <th>MARCA</th>\n",
|
||
" <th>% CONSUMIDOR</th>\n",
|
||
" <th>...</th>\n",
|
||
" <th>Item analisado</th>\n",
|
||
" <th>Histórico de Vendas do Ciclo 202409</th>\n",
|
||
" <th>match_x</th>\n",
|
||
" <th>CRESCIMENTO</th>\n",
|
||
" <th>Ciclo</th>\n",
|
||
" <th>INICIO CICLO</th>\n",
|
||
" <th>FIM CICLO</th>\n",
|
||
" <th>DURAÇÃO</th>\n",
|
||
" <th>match_y</th>\n",
|
||
" <th>dias_ate_inicio</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>59823</td>\n",
|
||
" <td>NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>NSPA LOC RAD DES HID CPO AMEI DOUR 400ml</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>CUIDADOS COM A PELE</td>\n",
|
||
" <td>NATIVA SPA</td>\n",
|
||
" <td>31,07 | 39,52</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>-0.0154</td>\n",
|
||
" <td>C202515</td>\n",
|
||
" <td>2025-10-13</td>\n",
|
||
" <td>2025-11-02</td>\n",
|
||
" <td>21</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>59</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>59823</td>\n",
|
||
" <td>NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>NSPA LOC RAD DES HID CPO AMEI DOUR 400ml</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>CUIDADOS COM A PELE</td>\n",
|
||
" <td>NATIVA SPA</td>\n",
|
||
" <td>31,07 | 39,52</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>-0.0341</td>\n",
|
||
" <td>C202515</td>\n",
|
||
" <td>2025-10-13</td>\n",
|
||
" <td>2025-11-02</td>\n",
|
||
" <td>21</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>59</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>59823</td>\n",
|
||
" <td>NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>NSPA LOC RAD DES HID CPO AMEI DOUR 400ml</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>CUIDADOS COM A PELE</td>\n",
|
||
" <td>NATIVA SPA</td>\n",
|
||
" <td>31,07 | 39,52</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>-0.0138</td>\n",
|
||
" <td>C202515</td>\n",
|
||
" <td>2025-10-13</td>\n",
|
||
" <td>2025-11-02</td>\n",
|
||
" <td>21</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>59</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>59823</td>\n",
|
||
" <td>NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>NSPA LOC RAD DES HID CPO AMEI DOUR 400ml</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>CUIDADOS COM A PELE</td>\n",
|
||
" <td>NATIVA SPA</td>\n",
|
||
" <td>31,07 | 39,52</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>-0.0595</td>\n",
|
||
" <td>C202515</td>\n",
|
||
" <td>2025-10-13</td>\n",
|
||
" <td>2025-11-02</td>\n",
|
||
" <td>21</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>59</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>59823</td>\n",
|
||
" <td>NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>NSPA LOC RAD DES HID CPO AMEI DOUR 400ml</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>CUIDADOS COM A PELE</td>\n",
|
||
" <td>NATIVA SPA</td>\n",
|
||
" <td>31,07 | 39,52</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>-0.0171</td>\n",
|
||
" <td>C202515</td>\n",
|
||
" <td>2025-10-13</td>\n",
|
||
" <td>2025-11-02</td>\n",
|
||
" <td>21</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>59</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>5 rows × 75 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" PRODUTO LANÇAMENTO DESCRIÇÃO DO LANÇAMENTO \\\n",
|
||
"0 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n",
|
||
"1 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n",
|
||
"2 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n",
|
||
"3 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n",
|
||
"4 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n",
|
||
"\n",
|
||
" PRODUTO SIMILAR DESCRIÇÃO SIMILAR CICLO SIMILAR \\\n",
|
||
"0 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n",
|
||
"1 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n",
|
||
"2 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n",
|
||
"3 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n",
|
||
"4 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n",
|
||
"\n",
|
||
" FOCO IAF CATEGORIA MARCA % CONSUMIDOR ... \\\n",
|
||
"0 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... \n",
|
||
"1 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... \n",
|
||
"2 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... \n",
|
||
"3 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... \n",
|
||
"4 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... \n",
|
||
"\n",
|
||
" Item analisado Histórico de Vendas do Ciclo 202409 match_x CRESCIMENTO \\\n",
|
||
"0 Não NaN 1.0 -0.0154 \n",
|
||
"1 Não NaN 1.0 -0.0341 \n",
|
||
"2 Não NaN 1.0 -0.0138 \n",
|
||
"3 Não NaN 1.0 -0.0595 \n",
|
||
"4 Não NaN 1.0 -0.0171 \n",
|
||
"\n",
|
||
" Ciclo INICIO CICLO FIM CICLO DURAÇÃO match_y dias_ate_inicio \n",
|
||
"0 C202515 2025-10-13 2025-11-02 21 1 59 \n",
|
||
"1 C202515 2025-10-13 2025-11-02 21 1 59 \n",
|
||
"2 C202515 2025-10-13 2025-11-02 21 1 59 \n",
|
||
"3 C202515 2025-10-13 2025-11-02 21 1 59 \n",
|
||
"4 C202515 2025-10-13 2025-11-02 21 1 59 \n",
|
||
"\n",
|
||
"[5 rows x 75 columns]"
|
||
]
|
||
},
|
||
"execution_count": 43,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_final.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 44,
|
||
"id": "8a05450c",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_final = pd.merge(left=df_final, right=calendario[['Ciclo','INICIO CICLO','FIM CICLO','DURAÇÃO']], right_on='Ciclo',left_on='CICLO SIMILAR',how='left')\n",
|
||
"df_final.shape\n",
|
||
"\n",
|
||
"df_final = df_final.drop_duplicates()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 45,
|
||
"id": "cc65edab",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<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 Lançamento</th>\n",
|
||
" <th>Ciclo</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>12522</td>\n",
|
||
" <td>51.944</td>\n",
|
||
" <td>COFFEE DES COL MAN SEDUC TCH PRM 10ml</td>\n",
|
||
" <td>11</td>\n",
|
||
" <td>C202307</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>20998</td>\n",
|
||
" <td>77.557</td>\n",
|
||
" <td>QDB BASE LIQ SUPERMAT COR 06 Q 30ml RPCK</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>C202405</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>20858</td>\n",
|
||
" <td>74.103</td>\n",
|
||
" <td>GLAMOUR DES COL SEC BL 75ml V4</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>C202409</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>5699</td>\n",
|
||
" <td>47.950</td>\n",
|
||
" <td>ZAAD EDP 95ml V6</td>\n",
|
||
" <td>12</td>\n",
|
||
" <td>C202406</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>20993</td>\n",
|
||
" <td>50.297</td>\n",
|
||
" <td>ESTJ DEM LILY ESSENCE 4x4ml</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>C202416</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" PDV SKU DESCRICAO \\\n",
|
||
"0 12522 51.944 COFFEE DES COL MAN SEDUC TCH PRM 10ml \n",
|
||
"1 20998 77.557 QDB BASE LIQ SUPERMAT COR 06 Q 30ml RPCK \n",
|
||
"2 20858 74.103 GLAMOUR DES COL SEC BL 75ml V4 \n",
|
||
"3 5699 47.950 ZAAD EDP 95ml V6 \n",
|
||
"4 20993 50.297 ESTJ DEM LILY ESSENCE 4x4ml \n",
|
||
"\n",
|
||
" Vendas Ciclo Lançamento Ciclo \n",
|
||
"0 11 C202307 \n",
|
||
"1 1 C202405 \n",
|
||
"2 5 C202409 \n",
|
||
"3 12 C202406 \n",
|
||
"4 2 C202416 "
|
||
]
|
||
},
|
||
"execution_count": 45,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"\n",
|
||
"df_venda_diaria = df_venda_diaria.rename(columns={'Vendas_Total':'Vendas Ciclo Lançamento'})\n",
|
||
"df_venda_diaria.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 46,
|
||
"id": "6367ac21",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"0 C202315\n",
|
||
"14 C202315\n",
|
||
"28 C202315\n",
|
||
"42 C202315\n",
|
||
"56 C202315\n",
|
||
" ... \n",
|
||
"19192 0\n",
|
||
"19193 0\n",
|
||
"19194 0\n",
|
||
"19195 0\n",
|
||
"19196 0\n",
|
||
"Name: CICLO SIMILAR, Length: 2291, dtype: object"
|
||
]
|
||
},
|
||
"execution_count": 46,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_final['CICLO SIMILAR'] = df_final['CICLO SIMILAR'].fillna('0')\n",
|
||
"df_final['CICLO SIMILAR'] "
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 47,
|
||
"id": "b0af59cb",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<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 SIMILAR</th>\n",
|
||
" <th>PRODUTO SIMILAR</th>\n",
|
||
" <th>PDV</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>12522</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>14</th>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>12817</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>28</th>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>12818</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>42</th>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>12820</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>56</th>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>12823</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" CICLO SIMILAR PRODUTO SIMILAR PDV\n",
|
||
"0 C202315 52004 12522\n",
|
||
"14 C202315 52004 12817\n",
|
||
"28 C202315 52004 12818\n",
|
||
"42 C202315 52004 12820\n",
|
||
"56 C202315 52004 12823"
|
||
]
|
||
},
|
||
"execution_count": 47,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_final[['CICLO SIMILAR','PRODUTO SIMILAR','PDV']].head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 48,
|
||
"id": "72925ca7",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"\n",
|
||
"\n",
|
||
"df_final['PRODUTO SIMILAR'] = df_final['PRODUTO SIMILAR'].astype('Int64')\n",
|
||
"\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 49,
|
||
"id": "8b0bb174",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"Index(['PRODUTO LANÇAMENTO', 'DESCRIÇÃO DO LANÇAMENTO', 'PRODUTO SIMILAR',\n",
|
||
" 'DESCRIÇÃO SIMILAR', 'CICLO SIMILAR', 'FOCO', 'IAF', 'CATEGORIA',\n",
|
||
" 'MARCA', '% CONSUMIDOR', 'MECANICA CONSUMIDOR', '% REVENDEDOR',\n",
|
||
" 'MECANICA REVENDEDOR', 'TIPO DE PRODUTO', 'MATCH', 'PDV', 'CANAL',\n",
|
||
" 'DESCRIÇÃO PDV', 'PDV DESC', 'UF', 'ANALISTA', 'SUPERVISOR', 'STATUS',\n",
|
||
" 'Classe', 'SKU', 'Descrição', 'Subcategoria', 'Lançamento',\n",
|
||
" 'Desativação', 'Histórico de Vendas do Ciclo 202410',\n",
|
||
" 'Histórico de Vendas do Ciclo 202411',\n",
|
||
" 'Histórico de Vendas do Ciclo 202412',\n",
|
||
" 'Histórico de Vendas do Ciclo 202413',\n",
|
||
" 'Histórico de Vendas do Ciclo 202414',\n",
|
||
" 'Histórico de Vendas do Ciclo 202415',\n",
|
||
" 'Histórico de Vendas do Ciclo 202416',\n",
|
||
" 'Histórico de Vendas do Ciclo 202417',\n",
|
||
" 'Histórico de Vendas do Ciclo 202501',\n",
|
||
" 'Histórico de Vendas do Ciclo 202502',\n",
|
||
" 'Histórico de Vendas do Ciclo 202503',\n",
|
||
" 'Histórico de Vendas do Ciclo 202504',\n",
|
||
" 'Histórico de Vendas do Ciclo 202505',\n",
|
||
" 'Histórico de Vendas do Ciclo 202506',\n",
|
||
" 'Histórico de Vendas do Ciclo 202507',\n",
|
||
" 'Histórico de Vendas do Ciclo 202508',\n",
|
||
" 'Histórico de Vendas do Ciclo 202509',\n",
|
||
" 'Histórico de Vendas do Ciclo Atual', 'Dias sem venda',\n",
|
||
" 'Projeção Próximo Ciclo', 'Projeção Próximo Ciclo + 1',\n",
|
||
" 'Promoção Próximo Ciclo', 'Promoção Próximo Ciclo + 1', 'Estoque Atual',\n",
|
||
" 'Estoque em Transito', 'Pedido Pendente',\n",
|
||
" 'Compra inteligente semanal/Sugestão de compra',\n",
|
||
" 'Compra inteligente Próximo Ciclo',\n",
|
||
" 'Compra inteligente Próximo Ciclo + 1', 'Item Desativado',\n",
|
||
" 'Data Prevista Regularização', 'Carteira Bloqueada Para Novos Pedidos',\n",
|
||
" 'Planograma', 'Quantidade por caixa', 'Preço Sell In', 'Quantidade',\n",
|
||
" 'Item analisado', 'Histórico de Vendas do Ciclo 202409', 'match_x',\n",
|
||
" 'CRESCIMENTO', 'Ciclo_x', 'INICIO CICLO_x', 'FIM CICLO_x', 'DURAÇÃO_x',\n",
|
||
" 'match_y', 'dias_ate_inicio', 'Ciclo_y', 'INICIO CICLO_y',\n",
|
||
" 'FIM CICLO_y', 'DURAÇÃO_y'],\n",
|
||
" dtype='object')"
|
||
]
|
||
},
|
||
"execution_count": 49,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_final.columns"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 50,
|
||
"id": "3d924087",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"0 52004\n",
|
||
"14 52004\n",
|
||
"28 52004\n",
|
||
"42 52004\n",
|
||
"56 52004\n",
|
||
" ... \n",
|
||
"19192 87771\n",
|
||
"19193 87771\n",
|
||
"19194 87771\n",
|
||
"19195 87771\n",
|
||
"19196 87771\n",
|
||
"Name: PRODUTO SIMILAR, Length: 2291, dtype: Int64"
|
||
]
|
||
},
|
||
"execution_count": 50,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_final['PRODUTO SIMILAR']"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 51,
|
||
"id": "c34b541a",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<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 Lançamento</th>\n",
|
||
" <th>Ciclo</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>12522</td>\n",
|
||
" <td>51.944</td>\n",
|
||
" <td>COFFEE DES COL MAN SEDUC TCH PRM 10ml</td>\n",
|
||
" <td>11</td>\n",
|
||
" <td>C202307</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>20998</td>\n",
|
||
" <td>77.557</td>\n",
|
||
" <td>QDB BASE LIQ SUPERMAT COR 06 Q 30ml RPCK</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>C202405</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>20858</td>\n",
|
||
" <td>74.103</td>\n",
|
||
" <td>GLAMOUR DES COL SEC BL 75ml V4</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>C202409</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>5699</td>\n",
|
||
" <td>47.950</td>\n",
|
||
" <td>ZAAD EDP 95ml V6</td>\n",
|
||
" <td>12</td>\n",
|
||
" <td>C202406</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>20993</td>\n",
|
||
" <td>50.297</td>\n",
|
||
" <td>ESTJ DEM LILY ESSENCE 4x4ml</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>C202416</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>...</th>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1663315</th>\n",
|
||
" <td>20996</td>\n",
|
||
" <td>83.039</td>\n",
|
||
" <td>QUASAR DES COL RUSH 100ml</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>C202415</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1663316</th>\n",
|
||
" <td>20970</td>\n",
|
||
" <td>52.025</td>\n",
|
||
" <td>BOTI BABY SAB LIQ GLIC V2 400ml</td>\n",
|
||
" <td>6</td>\n",
|
||
" <td>C202511</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1663317</th>\n",
|
||
" <td>20996</td>\n",
|
||
" <td>93.069</td>\n",
|
||
" <td>LA PIEL D/COL SPR CP PER AMBR DOUR 200ml</td>\n",
|
||
" <td>10</td>\n",
|
||
" <td>C202414</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1663318</th>\n",
|
||
" <td>13427</td>\n",
|
||
" <td>51.279</td>\n",
|
||
" <td>MAKE B BAS LIQ C/ GLYC TX 140 30g</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>C202309</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1663319</th>\n",
|
||
" <td>21278</td>\n",
|
||
" <td>52.014</td>\n",
|
||
" <td>CJ FLAC OUI EDP ICONIQUE INTENSE 3x1ml</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>C202511</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>1663320 rows × 5 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" PDV SKU DESCRICAO \\\n",
|
||
"0 12522 51.944 COFFEE DES COL MAN SEDUC TCH PRM 10ml \n",
|
||
"1 20998 77.557 QDB BASE LIQ SUPERMAT COR 06 Q 30ml RPCK \n",
|
||
"2 20858 74.103 GLAMOUR DES COL SEC BL 75ml V4 \n",
|
||
"3 5699 47.950 ZAAD EDP 95ml V6 \n",
|
||
"4 20993 50.297 ESTJ DEM LILY ESSENCE 4x4ml \n",
|
||
"... ... ... ... \n",
|
||
"1663315 20996 83.039 QUASAR DES COL RUSH 100ml \n",
|
||
"1663316 20970 52.025 BOTI BABY SAB LIQ GLIC V2 400ml \n",
|
||
"1663317 20996 93.069 LA PIEL D/COL SPR CP PER AMBR DOUR 200ml \n",
|
||
"1663318 13427 51.279 MAKE B BAS LIQ C/ GLYC TX 140 30g \n",
|
||
"1663319 21278 52.014 CJ FLAC OUI EDP ICONIQUE INTENSE 3x1ml \n",
|
||
"\n",
|
||
" Vendas Ciclo Lançamento Ciclo \n",
|
||
"0 11 C202307 \n",
|
||
"1 1 C202405 \n",
|
||
"2 5 C202409 \n",
|
||
"3 12 C202406 \n",
|
||
"4 2 C202416 \n",
|
||
"... ... ... \n",
|
||
"1663315 1 C202415 \n",
|
||
"1663316 6 C202511 \n",
|
||
"1663317 10 C202414 \n",
|
||
"1663318 1 C202309 \n",
|
||
"1663319 2 C202511 \n",
|
||
"\n",
|
||
"[1663320 rows x 5 columns]"
|
||
]
|
||
},
|
||
"execution_count": 51,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_venda_diaria"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 52,
|
||
"id": "1efff472",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<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 Lançamento</th>\n",
|
||
" <th>Ciclo</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>12522</td>\n",
|
||
" <td>51944</td>\n",
|
||
" <td>COFFEE DES COL MAN SEDUC TCH PRM 10ml</td>\n",
|
||
" <td>11</td>\n",
|
||
" <td>C202307</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>20998</td>\n",
|
||
" <td>77557</td>\n",
|
||
" <td>QDB BASE LIQ SUPERMAT COR 06 Q 30ml RPCK</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>C202405</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>20858</td>\n",
|
||
" <td>74103</td>\n",
|
||
" <td>GLAMOUR DES COL SEC BL 75ml V4</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>C202409</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>5699</td>\n",
|
||
" <td>47950</td>\n",
|
||
" <td>ZAAD EDP 95ml V6</td>\n",
|
||
" <td>12</td>\n",
|
||
" <td>C202406</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>20993</td>\n",
|
||
" <td>50297</td>\n",
|
||
" <td>ESTJ DEM LILY ESSENCE 4x4ml</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>C202416</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" PDV SKU DESCRICAO \\\n",
|
||
"0 12522 51944 COFFEE DES COL MAN SEDUC TCH PRM 10ml \n",
|
||
"1 20998 77557 QDB BASE LIQ SUPERMAT COR 06 Q 30ml RPCK \n",
|
||
"2 20858 74103 GLAMOUR DES COL SEC BL 75ml V4 \n",
|
||
"3 5699 47950 ZAAD EDP 95ml V6 \n",
|
||
"4 20993 50297 ESTJ DEM LILY ESSENCE 4x4ml \n",
|
||
"\n",
|
||
" Vendas Ciclo Lançamento Ciclo \n",
|
||
"0 11 C202307 \n",
|
||
"1 1 C202405 \n",
|
||
"2 5 C202409 \n",
|
||
"3 12 C202406 \n",
|
||
"4 2 C202416 "
|
||
]
|
||
},
|
||
"execution_count": 52,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_venda_diaria['SKU'] = df_venda_diaria['SKU'].astype('str')\n",
|
||
"\n",
|
||
"df_venda_diaria['SKU'] = df_venda_diaria['SKU'].str.replace('.','')\n",
|
||
"\n",
|
||
"df_venda_diaria.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 53,
|
||
"id": "62ea79f7",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_final['PRODUTO SIMILAR'] = df_final['PRODUTO SIMILAR'].astype('str')"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 54,
|
||
"id": "c5383011",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<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>PRODUTO LANÇAMENTO</th>\n",
|
||
" <th>DESCRIÇÃO DO LANÇAMENTO</th>\n",
|
||
" <th>PRODUTO SIMILAR</th>\n",
|
||
" <th>DESCRIÇÃO SIMILAR</th>\n",
|
||
" <th>CICLO SIMILAR</th>\n",
|
||
" <th>FOCO</th>\n",
|
||
" <th>IAF</th>\n",
|
||
" <th>CATEGORIA</th>\n",
|
||
" <th>MARCA</th>\n",
|
||
" <th>% CONSUMIDOR</th>\n",
|
||
" <th>...</th>\n",
|
||
" <th>Ciclo_x</th>\n",
|
||
" <th>INICIO CICLO_x</th>\n",
|
||
" <th>FIM CICLO_x</th>\n",
|
||
" <th>DURAÇÃO_x</th>\n",
|
||
" <th>match_y</th>\n",
|
||
" <th>dias_ate_inicio</th>\n",
|
||
" <th>Ciclo_y</th>\n",
|
||
" <th>INICIO CICLO_y</th>\n",
|
||
" <th>FIM CICLO_y</th>\n",
|
||
" <th>DURAÇÃO_y</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>59823</td>\n",
|
||
" <td>NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>NSPA LOC RAD DES HID CPO AMEI DOUR 400ml</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>CUIDADOS COM A PELE</td>\n",
|
||
" <td>NATIVA SPA</td>\n",
|
||
" <td>31,07 | 39,52</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>C202515</td>\n",
|
||
" <td>2025-10-13</td>\n",
|
||
" <td>2025-11-02</td>\n",
|
||
" <td>21</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>59</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>2023-10-16</td>\n",
|
||
" <td>2023-10-29</td>\n",
|
||
" <td>14.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>14</th>\n",
|
||
" <td>59823</td>\n",
|
||
" <td>NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>NSPA LOC RAD DES HID CPO AMEI DOUR 400ml</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>CUIDADOS COM A PELE</td>\n",
|
||
" <td>NATIVA SPA</td>\n",
|
||
" <td>31,07 | 39,52</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>C202515</td>\n",
|
||
" <td>2025-10-13</td>\n",
|
||
" <td>2025-11-02</td>\n",
|
||
" <td>21</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>59</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>2023-10-16</td>\n",
|
||
" <td>2023-10-29</td>\n",
|
||
" <td>14.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>28</th>\n",
|
||
" <td>59823</td>\n",
|
||
" <td>NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>NSPA LOC RAD DES HID CPO AMEI DOUR 400ml</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>CUIDADOS COM A PELE</td>\n",
|
||
" <td>NATIVA SPA</td>\n",
|
||
" <td>31,07 | 39,52</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>C202515</td>\n",
|
||
" <td>2025-10-13</td>\n",
|
||
" <td>2025-11-02</td>\n",
|
||
" <td>21</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>59</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>2023-10-16</td>\n",
|
||
" <td>2023-10-29</td>\n",
|
||
" <td>14.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>42</th>\n",
|
||
" <td>59823</td>\n",
|
||
" <td>NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>NSPA LOC RAD DES HID CPO AMEI DOUR 400ml</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>CUIDADOS COM A PELE</td>\n",
|
||
" <td>NATIVA SPA</td>\n",
|
||
" <td>31,07 | 39,52</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>C202515</td>\n",
|
||
" <td>2025-10-13</td>\n",
|
||
" <td>2025-11-02</td>\n",
|
||
" <td>21</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>59</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>2023-10-16</td>\n",
|
||
" <td>2023-10-29</td>\n",
|
||
" <td>14.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>56</th>\n",
|
||
" <td>59823</td>\n",
|
||
" <td>NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>NSPA LOC RAD DES HID CPO AMEI DOUR 400ml</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>CUIDADOS COM A PELE</td>\n",
|
||
" <td>NATIVA SPA</td>\n",
|
||
" <td>31,07 | 39,52</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>C202515</td>\n",
|
||
" <td>2025-10-13</td>\n",
|
||
" <td>2025-11-02</td>\n",
|
||
" <td>21</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>59</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>2023-10-16</td>\n",
|
||
" <td>2023-10-29</td>\n",
|
||
" <td>14.0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>5 rows × 79 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" PRODUTO LANÇAMENTO DESCRIÇÃO DO LANÇAMENTO \\\n",
|
||
"0 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n",
|
||
"14 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n",
|
||
"28 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n",
|
||
"42 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n",
|
||
"56 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n",
|
||
"\n",
|
||
" PRODUTO SIMILAR DESCRIÇÃO SIMILAR CICLO SIMILAR \\\n",
|
||
"0 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n",
|
||
"14 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n",
|
||
"28 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n",
|
||
"42 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n",
|
||
"56 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n",
|
||
"\n",
|
||
" FOCO IAF CATEGORIA MARCA % CONSUMIDOR ... Ciclo_x \\\n",
|
||
"0 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... C202515 \n",
|
||
"14 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... C202515 \n",
|
||
"28 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... C202515 \n",
|
||
"42 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... C202515 \n",
|
||
"56 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... C202515 \n",
|
||
"\n",
|
||
" INICIO CICLO_x FIM CICLO_x DURAÇÃO_x match_y dias_ate_inicio Ciclo_y \\\n",
|
||
"0 2025-10-13 2025-11-02 21 1 59 C202315 \n",
|
||
"14 2025-10-13 2025-11-02 21 1 59 C202315 \n",
|
||
"28 2025-10-13 2025-11-02 21 1 59 C202315 \n",
|
||
"42 2025-10-13 2025-11-02 21 1 59 C202315 \n",
|
||
"56 2025-10-13 2025-11-02 21 1 59 C202315 \n",
|
||
"\n",
|
||
" INICIO CICLO_y FIM CICLO_y DURAÇÃO_y \n",
|
||
"0 2023-10-16 2023-10-29 14.0 \n",
|
||
"14 2023-10-16 2023-10-29 14.0 \n",
|
||
"28 2023-10-16 2023-10-29 14.0 \n",
|
||
"42 2023-10-16 2023-10-29 14.0 \n",
|
||
"56 2023-10-16 2023-10-29 14.0 \n",
|
||
"\n",
|
||
"[5 rows x 79 columns]"
|
||
]
|
||
},
|
||
"execution_count": 54,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_final.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 55,
|
||
"id": "c5cd5f42",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_final = pd.merge(left=df_final, right = df_venda_diaria[['PDV','SKU','Ciclo','Vendas Ciclo Lançamento']], right_on=['Ciclo','SKU','PDV'],left_on=['CICLO SIMILAR','PRODUTO SIMILAR','PDV'],how='left')\n",
|
||
"\n",
|
||
"df_final = df_final.drop_duplicates()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 56,
|
||
"id": "4f22b782",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<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>PRODUTO LANÇAMENTO</th>\n",
|
||
" <th>DESCRIÇÃO DO LANÇAMENTO</th>\n",
|
||
" <th>PRODUTO SIMILAR</th>\n",
|
||
" <th>DESCRIÇÃO SIMILAR</th>\n",
|
||
" <th>CICLO SIMILAR</th>\n",
|
||
" <th>FOCO</th>\n",
|
||
" <th>IAF</th>\n",
|
||
" <th>CATEGORIA</th>\n",
|
||
" <th>MARCA</th>\n",
|
||
" <th>% CONSUMIDOR</th>\n",
|
||
" <th>...</th>\n",
|
||
" <th>DURAÇÃO_x</th>\n",
|
||
" <th>match_y</th>\n",
|
||
" <th>dias_ate_inicio</th>\n",
|
||
" <th>Ciclo_y</th>\n",
|
||
" <th>INICIO CICLO_y</th>\n",
|
||
" <th>FIM CICLO_y</th>\n",
|
||
" <th>DURAÇÃO_y</th>\n",
|
||
" <th>SKU_y</th>\n",
|
||
" <th>Ciclo</th>\n",
|
||
" <th>Vendas Ciclo Lançamento</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>59823</td>\n",
|
||
" <td>NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>NSPA LOC RAD DES HID CPO AMEI DOUR 400ml</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>CUIDADOS COM A PELE</td>\n",
|
||
" <td>NATIVA SPA</td>\n",
|
||
" <td>31,07 | 39,52</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>21</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>59</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>2023-10-16</td>\n",
|
||
" <td>2023-10-29</td>\n",
|
||
" <td>14.0</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>22</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>59823</td>\n",
|
||
" <td>NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>NSPA LOC RAD DES HID CPO AMEI DOUR 400ml</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>CUIDADOS COM A PELE</td>\n",
|
||
" <td>NATIVA SPA</td>\n",
|
||
" <td>31,07 | 39,52</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>21</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>59</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>2023-10-16</td>\n",
|
||
" <td>2023-10-29</td>\n",
|
||
" <td>14.0</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>36</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>59823</td>\n",
|
||
" <td>NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>NSPA LOC RAD DES HID CPO AMEI DOUR 400ml</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>CUIDADOS COM A PELE</td>\n",
|
||
" <td>NATIVA SPA</td>\n",
|
||
" <td>31,07 | 39,52</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>21</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>59</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>2023-10-16</td>\n",
|
||
" <td>2023-10-29</td>\n",
|
||
" <td>14.0</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>9</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>59823</td>\n",
|
||
" <td>NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>NSPA LOC RAD DES HID CPO AMEI DOUR 400ml</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>CUIDADOS COM A PELE</td>\n",
|
||
" <td>NATIVA SPA</td>\n",
|
||
" <td>31,07 | 39,52</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>21</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>59</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>2023-10-16</td>\n",
|
||
" <td>2023-10-29</td>\n",
|
||
" <td>14.0</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>5</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>59823</td>\n",
|
||
" <td>NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>NSPA LOC RAD DES HID CPO AMEI DOUR 400ml</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>CUIDADOS COM A PELE</td>\n",
|
||
" <td>NATIVA SPA</td>\n",
|
||
" <td>31,07 | 39,52</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>21</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>59</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>2023-10-16</td>\n",
|
||
" <td>2023-10-29</td>\n",
|
||
" <td>14.0</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>28</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>5 rows × 82 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" PRODUTO LANÇAMENTO DESCRIÇÃO DO LANÇAMENTO \\\n",
|
||
"0 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n",
|
||
"1 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n",
|
||
"2 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n",
|
||
"3 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n",
|
||
"4 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n",
|
||
"\n",
|
||
" PRODUTO SIMILAR DESCRIÇÃO SIMILAR CICLO SIMILAR \\\n",
|
||
"0 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n",
|
||
"1 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n",
|
||
"2 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n",
|
||
"3 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n",
|
||
"4 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n",
|
||
"\n",
|
||
" FOCO IAF CATEGORIA MARCA % CONSUMIDOR ... DURAÇÃO_x \\\n",
|
||
"0 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... 21 \n",
|
||
"1 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... 21 \n",
|
||
"2 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... 21 \n",
|
||
"3 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... 21 \n",
|
||
"4 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... 21 \n",
|
||
"\n",
|
||
" match_y dias_ate_inicio Ciclo_y INICIO CICLO_y FIM CICLO_y DURAÇÃO_y \\\n",
|
||
"0 1 59 C202315 2023-10-16 2023-10-29 14.0 \n",
|
||
"1 1 59 C202315 2023-10-16 2023-10-29 14.0 \n",
|
||
"2 1 59 C202315 2023-10-16 2023-10-29 14.0 \n",
|
||
"3 1 59 C202315 2023-10-16 2023-10-29 14.0 \n",
|
||
"4 1 59 C202315 2023-10-16 2023-10-29 14.0 \n",
|
||
"\n",
|
||
" SKU_y Ciclo Vendas Ciclo Lançamento \n",
|
||
"0 52004 C202315 22 \n",
|
||
"1 52004 C202315 36 \n",
|
||
"2 52004 C202315 9 \n",
|
||
"3 52004 C202315 5 \n",
|
||
"4 52004 C202315 28 \n",
|
||
"\n",
|
||
"[5 rows x 82 columns]"
|
||
]
|
||
},
|
||
"execution_count": 56,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_final.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 57,
|
||
"id": "db516beb",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_final.to_excel(r'C:\\Users\\joao.herculano\\Documents\\teste.xlsx',index=False)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 58,
|
||
"id": "bde12ed6",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_final = df_final[df_final['PRODUTO LANÇAMENTO'].notna()]\n",
|
||
"df_final['Vendas Ciclo Lançamento'] = df_final['Vendas Ciclo Lançamento'].fillna(0)\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 59,
|
||
"id": "69c88d20",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"np.int64(29)"
|
||
]
|
||
},
|
||
"execution_count": 59,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_final['PDV'].value_counts().min()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 60,
|
||
"id": "f5206f50",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"Index(['Histórico de Vendas do Ciclo 202410',\n",
|
||
" 'Histórico de Vendas do Ciclo 202411',\n",
|
||
" 'Histórico de Vendas do Ciclo 202412',\n",
|
||
" 'Histórico de Vendas do Ciclo 202413',\n",
|
||
" 'Histórico de Vendas do Ciclo 202414',\n",
|
||
" 'Histórico de Vendas do Ciclo 202415',\n",
|
||
" 'Histórico de Vendas do Ciclo 202416',\n",
|
||
" 'Histórico de Vendas do Ciclo 202417',\n",
|
||
" 'Histórico de Vendas do Ciclo 202501',\n",
|
||
" 'Histórico de Vendas do Ciclo 202502',\n",
|
||
" 'Histórico de Vendas do Ciclo 202503',\n",
|
||
" 'Histórico de Vendas do Ciclo 202504',\n",
|
||
" 'Histórico de Vendas do Ciclo 202505',\n",
|
||
" 'Histórico de Vendas do Ciclo 202506',\n",
|
||
" 'Histórico de Vendas do Ciclo 202507',\n",
|
||
" 'Histórico de Vendas do Ciclo 202508',\n",
|
||
" 'Histórico de Vendas do Ciclo 202509'],\n",
|
||
" dtype='object')"
|
||
]
|
||
},
|
||
"execution_count": 60,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_final.columns[29:46]"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 61,
|
||
"id": "5e33d293",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_jacobina = pd.read_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\REGIÃO JACOBINA\\draft unificado.xlsx\")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 62,
|
||
"id": "4d23ff5a",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_jacobina = df_jacobina[['PDV', 'SKU','202408', '202409',\n",
|
||
" '202410', '202411', '202412', '202413', '202414', '202415', '202416',\n",
|
||
" '202417', '202501', '202502', '202503', '202504', '202505', '202506',\n",
|
||
" '202507']]"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 63,
|
||
"id": "5adc5831",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"ciclos = [\n",
|
||
" '202408', '202409', '202410', '202411', '202412', '202413',\n",
|
||
" '202414', '202415', '202416', '202417', '202501', '202502',\n",
|
||
" '202503', '202504', '202505', '202506', '202507']\n",
|
||
"\n",
|
||
"df_jacobina[ciclos] = df_jacobina[ciclos].fillna(0)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 64,
|
||
"id": "d3dc8c38",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<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>202408</th>\n",
|
||
" <th>202409</th>\n",
|
||
" <th>202410</th>\n",
|
||
" <th>202411</th>\n",
|
||
" <th>202412</th>\n",
|
||
" <th>202413</th>\n",
|
||
" <th>202414</th>\n",
|
||
" <th>202415</th>\n",
|
||
" <th>202416</th>\n",
|
||
" <th>202417</th>\n",
|
||
" <th>202501</th>\n",
|
||
" <th>202502</th>\n",
|
||
" <th>202503</th>\n",
|
||
" <th>202504</th>\n",
|
||
" <th>202505</th>\n",
|
||
" <th>202506</th>\n",
|
||
" <th>202507</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>24269</td>\n",
|
||
" <td>49014</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>24268</td>\n",
|
||
" <td>49014</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>24269</td>\n",
|
||
" <td>49016</td>\n",
|
||
" <td>36</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>14</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>19</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>10</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>24268</td>\n",
|
||
" <td>49016</td>\n",
|
||
" <td>12</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>11</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>24269</td>\n",
|
||
" <td>48141</td>\n",
|
||
" <td>32</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>95</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>41</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>67</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>10</td>\n",
|
||
" <td>2</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" PDV SKU 202408 202409 202410 202411 202412 202413 202414 \\\n",
|
||
"0 24269 49014 1 0 5 1 1 1 2 \n",
|
||
"1 24268 49014 1 0 4 4 2 5 1 \n",
|
||
"2 24269 49016 36 3 1 1 1 0 14 \n",
|
||
"3 24268 49016 12 3 1 2 2 2 0 \n",
|
||
"4 24269 48141 32 2 3 95 3 2 41 \n",
|
||
"\n",
|
||
" 202415 202416 202417 202501 202502 202503 202504 202505 202506 \\\n",
|
||
"0 2 1 1 3 0 4 0 2 1 \n",
|
||
"1 3 4 4 3 0 2 4 2 0 \n",
|
||
"2 2 2 1 1 19 1 2 2 10 \n",
|
||
"3 0 3 11 4 3 0 4 2 1 \n",
|
||
"4 3 3 1 1 1 0 67 4 10 \n",
|
||
"\n",
|
||
" 202507 \n",
|
||
"0 0 \n",
|
||
"1 1 \n",
|
||
"2 0 \n",
|
||
"3 0 \n",
|
||
"4 2 "
|
||
]
|
||
},
|
||
"execution_count": 64,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_jacobina.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 65,
|
||
"id": "4169aba0",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<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>PRODUTO LANÇAMENTO</th>\n",
|
||
" <th>DESCRIÇÃO DO LANÇAMENTO</th>\n",
|
||
" <th>PRODUTO SIMILAR</th>\n",
|
||
" <th>DESCRIÇÃO SIMILAR</th>\n",
|
||
" <th>CICLO SIMILAR</th>\n",
|
||
" <th>FOCO</th>\n",
|
||
" <th>IAF</th>\n",
|
||
" <th>CATEGORIA</th>\n",
|
||
" <th>MARCA</th>\n",
|
||
" <th>% CONSUMIDOR</th>\n",
|
||
" <th>...</th>\n",
|
||
" <th>DURAÇÃO_x</th>\n",
|
||
" <th>match_y</th>\n",
|
||
" <th>dias_ate_inicio</th>\n",
|
||
" <th>Ciclo_y</th>\n",
|
||
" <th>INICIO CICLO_y</th>\n",
|
||
" <th>FIM CICLO_y</th>\n",
|
||
" <th>DURAÇÃO_y</th>\n",
|
||
" <th>SKU_y</th>\n",
|
||
" <th>Ciclo</th>\n",
|
||
" <th>Vendas Ciclo Lançamento</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>59823</td>\n",
|
||
" <td>NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>NSPA LOC RAD DES HID CPO AMEI DOUR 400ml</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>CUIDADOS COM A PELE</td>\n",
|
||
" <td>NATIVA SPA</td>\n",
|
||
" <td>31,07 | 39,52</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>21</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>59</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>2023-10-16</td>\n",
|
||
" <td>2023-10-29</td>\n",
|
||
" <td>14.0</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>22</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>59823</td>\n",
|
||
" <td>NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>NSPA LOC RAD DES HID CPO AMEI DOUR 400ml</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>CUIDADOS COM A PELE</td>\n",
|
||
" <td>NATIVA SPA</td>\n",
|
||
" <td>31,07 | 39,52</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>21</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>59</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>2023-10-16</td>\n",
|
||
" <td>2023-10-29</td>\n",
|
||
" <td>14.0</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>36</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>59823</td>\n",
|
||
" <td>NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>NSPA LOC RAD DES HID CPO AMEI DOUR 400ml</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>CUIDADOS COM A PELE</td>\n",
|
||
" <td>NATIVA SPA</td>\n",
|
||
" <td>31,07 | 39,52</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>21</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>59</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>2023-10-16</td>\n",
|
||
" <td>2023-10-29</td>\n",
|
||
" <td>14.0</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>9</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>59823</td>\n",
|
||
" <td>NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>NSPA LOC RAD DES HID CPO AMEI DOUR 400ml</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>CUIDADOS COM A PELE</td>\n",
|
||
" <td>NATIVA SPA</td>\n",
|
||
" <td>31,07 | 39,52</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>21</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>59</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>2023-10-16</td>\n",
|
||
" <td>2023-10-29</td>\n",
|
||
" <td>14.0</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>5</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>59823</td>\n",
|
||
" <td>NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>NSPA LOC RAD DES HID CPO AMEI DOUR 400ml</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>CUIDADOS COM A PELE</td>\n",
|
||
" <td>NATIVA SPA</td>\n",
|
||
" <td>31,07 | 39,52</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>21</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>59</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>2023-10-16</td>\n",
|
||
" <td>2023-10-29</td>\n",
|
||
" <td>14.0</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>28</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>5 rows × 82 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" PRODUTO LANÇAMENTO DESCRIÇÃO DO LANÇAMENTO \\\n",
|
||
"0 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n",
|
||
"1 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n",
|
||
"2 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n",
|
||
"3 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n",
|
||
"4 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n",
|
||
"\n",
|
||
" PRODUTO SIMILAR DESCRIÇÃO SIMILAR CICLO SIMILAR \\\n",
|
||
"0 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n",
|
||
"1 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n",
|
||
"2 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n",
|
||
"3 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n",
|
||
"4 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n",
|
||
"\n",
|
||
" FOCO IAF CATEGORIA MARCA % CONSUMIDOR ... DURAÇÃO_x \\\n",
|
||
"0 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... 21 \n",
|
||
"1 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... 21 \n",
|
||
"2 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... 21 \n",
|
||
"3 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... 21 \n",
|
||
"4 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... 21 \n",
|
||
"\n",
|
||
" match_y dias_ate_inicio Ciclo_y INICIO CICLO_y FIM CICLO_y DURAÇÃO_y \\\n",
|
||
"0 1 59 C202315 2023-10-16 2023-10-29 14.0 \n",
|
||
"1 1 59 C202315 2023-10-16 2023-10-29 14.0 \n",
|
||
"2 1 59 C202315 2023-10-16 2023-10-29 14.0 \n",
|
||
"3 1 59 C202315 2023-10-16 2023-10-29 14.0 \n",
|
||
"4 1 59 C202315 2023-10-16 2023-10-29 14.0 \n",
|
||
"\n",
|
||
" SKU_y Ciclo Vendas Ciclo Lançamento \n",
|
||
"0 52004 C202315 22 \n",
|
||
"1 52004 C202315 36 \n",
|
||
"2 52004 C202315 9 \n",
|
||
"3 52004 C202315 5 \n",
|
||
"4 52004 C202315 28 \n",
|
||
"\n",
|
||
"[5 rows x 82 columns]"
|
||
]
|
||
},
|
||
"execution_count": 65,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_final['PRODUTO SIMILAR'] = df_final['PRODUTO SIMILAR'].astype('Int64')\n",
|
||
"\n",
|
||
"df_final.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 66,
|
||
"id": "1c4f5d9d",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_final = pd.merge(left=df_final,right=df_jacobina,left_on=['PRODUTO SIMILAR','PDV'],right_on=['SKU','PDV'],how='left')"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 67,
|
||
"id": "2529e624",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# Gera pares de colunas: coluna estática ↔ coluna de histórico\n",
|
||
"pares_validos = [\n",
|
||
" (ciclo, f'Histórico de Vendas do Ciclo {ciclo}')\n",
|
||
" for ciclo in ciclos\n",
|
||
" if ciclo in df_final.columns and f'Histórico de Vendas do Ciclo {ciclo}' in df_final.columns\n",
|
||
"]\n",
|
||
"\n",
|
||
"# Separa os nomes das colunas\n",
|
||
"colunas_estaticas = [c[0] for c in pares_validos]\n",
|
||
"colunas_historico = [c[1] for c in pares_validos]\n",
|
||
"\n",
|
||
"# Aplica a regra: se valor na coluna estática for maior, sobrescreve no histórico\n",
|
||
"for col_estatica, col_hist in zip(colunas_estaticas, colunas_historico):\n",
|
||
" df_final[col_hist] = df_final[col_estatica].where(\n",
|
||
" df_final[col_estatica] > df_final[col_hist],\n",
|
||
" df_final[col_hist]\n",
|
||
" )\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 68,
|
||
"id": "fc094fae",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<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>PRODUTO LANÇAMENTO</th>\n",
|
||
" <th>DESCRIÇÃO DO LANÇAMENTO</th>\n",
|
||
" <th>PRODUTO SIMILAR</th>\n",
|
||
" <th>DESCRIÇÃO SIMILAR</th>\n",
|
||
" <th>CICLO SIMILAR</th>\n",
|
||
" <th>FOCO</th>\n",
|
||
" <th>IAF</th>\n",
|
||
" <th>CATEGORIA</th>\n",
|
||
" <th>MARCA</th>\n",
|
||
" <th>% CONSUMIDOR</th>\n",
|
||
" <th>...</th>\n",
|
||
" <th>202415</th>\n",
|
||
" <th>202416</th>\n",
|
||
" <th>202417</th>\n",
|
||
" <th>202501</th>\n",
|
||
" <th>202502</th>\n",
|
||
" <th>202503</th>\n",
|
||
" <th>202504</th>\n",
|
||
" <th>202505</th>\n",
|
||
" <th>202506</th>\n",
|
||
" <th>202507</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>59823</td>\n",
|
||
" <td>NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>NSPA LOC RAD DES HID CPO AMEI DOUR 400ml</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>CUIDADOS COM A PELE</td>\n",
|
||
" <td>NATIVA SPA</td>\n",
|
||
" <td>31,07 | 39,52</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>59823</td>\n",
|
||
" <td>NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>NSPA LOC RAD DES HID CPO AMEI DOUR 400ml</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>CUIDADOS COM A PELE</td>\n",
|
||
" <td>NATIVA SPA</td>\n",
|
||
" <td>31,07 | 39,52</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>59823</td>\n",
|
||
" <td>NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>NSPA LOC RAD DES HID CPO AMEI DOUR 400ml</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>CUIDADOS COM A PELE</td>\n",
|
||
" <td>NATIVA SPA</td>\n",
|
||
" <td>31,07 | 39,52</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>59823</td>\n",
|
||
" <td>NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>NSPA LOC RAD DES HID CPO AMEI DOUR 400ml</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>CUIDADOS COM A PELE</td>\n",
|
||
" <td>NATIVA SPA</td>\n",
|
||
" <td>31,07 | 39,52</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>59823</td>\n",
|
||
" <td>NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...</td>\n",
|
||
" <td>52004</td>\n",
|
||
" <td>NSPA LOC RAD DES HID CPO AMEI DOUR 400ml</td>\n",
|
||
" <td>C202315</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>Sim</td>\n",
|
||
" <td>CUIDADOS COM A PELE</td>\n",
|
||
" <td>NATIVA SPA</td>\n",
|
||
" <td>31,07 | 39,52</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>...</th>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2286</th>\n",
|
||
" <td>87771</td>\n",
|
||
" <td>MAKE B BLUSH COMP BERRY MINI PRM 1,5g</td>\n",
|
||
" <td>87771</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>SUPORTE À VENDA</td>\n",
|
||
" <td>MAKE B.</td>\n",
|
||
" <td>-</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2287</th>\n",
|
||
" <td>87771</td>\n",
|
||
" <td>MAKE B BLUSH COMP BERRY MINI PRM 1,5g</td>\n",
|
||
" <td>87771</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>SUPORTE À VENDA</td>\n",
|
||
" <td>MAKE B.</td>\n",
|
||
" <td>-</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2288</th>\n",
|
||
" <td>87771</td>\n",
|
||
" <td>MAKE B BLUSH COMP BERRY MINI PRM 1,5g</td>\n",
|
||
" <td>87771</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>SUPORTE À VENDA</td>\n",
|
||
" <td>MAKE B.</td>\n",
|
||
" <td>-</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2289</th>\n",
|
||
" <td>87771</td>\n",
|
||
" <td>MAKE B BLUSH COMP BERRY MINI PRM 1,5g</td>\n",
|
||
" <td>87771</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>SUPORTE À VENDA</td>\n",
|
||
" <td>MAKE B.</td>\n",
|
||
" <td>-</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2290</th>\n",
|
||
" <td>87771</td>\n",
|
||
" <td>MAKE B BLUSH COMP BERRY MINI PRM 1,5g</td>\n",
|
||
" <td>87771</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>Não</td>\n",
|
||
" <td>SUPORTE À VENDA</td>\n",
|
||
" <td>MAKE B.</td>\n",
|
||
" <td>-</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>2291 rows × 100 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" PRODUTO LANÇAMENTO DESCRIÇÃO DO LANÇAMENTO \\\n",
|
||
"0 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n",
|
||
"1 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n",
|
||
"2 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n",
|
||
"3 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n",
|
||
"4 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n",
|
||
"... ... ... \n",
|
||
"2286 87771 MAKE B BLUSH COMP BERRY MINI PRM 1,5g \n",
|
||
"2287 87771 MAKE B BLUSH COMP BERRY MINI PRM 1,5g \n",
|
||
"2288 87771 MAKE B BLUSH COMP BERRY MINI PRM 1,5g \n",
|
||
"2289 87771 MAKE B BLUSH COMP BERRY MINI PRM 1,5g \n",
|
||
"2290 87771 MAKE B BLUSH COMP BERRY MINI PRM 1,5g \n",
|
||
"\n",
|
||
" PRODUTO SIMILAR DESCRIÇÃO SIMILAR CICLO SIMILAR \\\n",
|
||
"0 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n",
|
||
"1 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n",
|
||
"2 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n",
|
||
"3 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n",
|
||
"4 52004 NSPA LOC RAD DES HID CPO AMEI DOUR 400ml C202315 \n",
|
||
"... ... ... ... \n",
|
||
"2286 87771 0 0 \n",
|
||
"2287 87771 0 0 \n",
|
||
"2288 87771 0 0 \n",
|
||
"2289 87771 0 0 \n",
|
||
"2290 87771 0 0 \n",
|
||
"\n",
|
||
" FOCO IAF CATEGORIA MARCA % CONSUMIDOR ... 202415 \\\n",
|
||
"0 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... NaN \n",
|
||
"1 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... NaN \n",
|
||
"2 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... NaN \n",
|
||
"3 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... NaN \n",
|
||
"4 Sim Sim CUIDADOS COM A PELE NATIVA SPA 31,07 | 39,52 ... NaN \n",
|
||
"... ... ... ... ... ... ... ... \n",
|
||
"2286 Não Não SUPORTE À VENDA MAKE B. - ... NaN \n",
|
||
"2287 Não Não SUPORTE À VENDA MAKE B. - ... NaN \n",
|
||
"2288 Não Não SUPORTE À VENDA MAKE B. - ... NaN \n",
|
||
"2289 Não Não SUPORTE À VENDA MAKE B. - ... NaN \n",
|
||
"2290 Não Não SUPORTE À VENDA MAKE B. - ... NaN \n",
|
||
"\n",
|
||
" 202416 202417 202501 202502 202503 202504 202505 202506 202507 \n",
|
||
"0 NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
|
||
"1 NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
|
||
"2 NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
|
||
"3 NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
|
||
"4 NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
|
||
"... ... ... ... ... ... ... ... ... ... \n",
|
||
"2286 NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
|
||
"2287 NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
|
||
"2288 NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
|
||
"2289 NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
|
||
"2290 NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
|
||
"\n",
|
||
"[2291 rows x 100 columns]"
|
||
]
|
||
},
|
||
"execution_count": 68,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_final"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 69,
|
||
"id": "dcff1fcb",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"C:\\Users\\joao.herculano\\AppData\\Local\\Temp\\ipykernel_101180\\260461722.py:1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n",
|
||
" df_final = df_final.fillna(0)\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"df_final = df_final.fillna(0)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 70,
|
||
"id": "0a1bb832",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"np.float64(0.2267)"
|
||
]
|
||
},
|
||
"execution_count": 70,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"# Suponha que os meses estão nas colunas 10 a 26 (17 colunas = 17 meses)\n",
|
||
"colunas_mensais = df_final.columns[29:46]\n",
|
||
"\n",
|
||
"# Passo 1: Soma todas as linhas (itens) por mês → resultado: total por mês\n",
|
||
"soma_mensal = df_final[colunas_mensais].sum()\n",
|
||
"\n",
|
||
"# Passo 2: Calcula a variação percentual de um mês para o outro\n",
|
||
"variacao_mensal = soma_mensal.pct_change()\n",
|
||
"variacao_mensal = variacao_mensal.dropna()\n",
|
||
"\n",
|
||
"variacao_mensal = variacao_mensal[np.isfinite(variacao_mensal)]\n",
|
||
"\n",
|
||
"# Passo 3: Calcula a média da variação (ignorando o primeiro NaN)\n",
|
||
"media_variacao = variacao_mensal[1:].mean()\n",
|
||
"\n",
|
||
"# Calcula média e desvio padrão\n",
|
||
"media = variacao_mensal.mean()\n",
|
||
"desvio = variacao_mensal.std()\n",
|
||
"\n",
|
||
"# Define limite (ex: 2 desvios padrão)\n",
|
||
"limite_superior = media + 2 * desvio\n",
|
||
"limite_inferior = media - 2 * desvio\n",
|
||
"\n",
|
||
"# Filtra dados dentro do limite\n",
|
||
"filtro = variacao_mensal.between(limite_inferior, limite_superior)\n",
|
||
"df_filtrado = variacao_mensal[filtro]\n",
|
||
"CRESCIMENTO = round(df_filtrado.mean(),4)\n",
|
||
"\n",
|
||
"CRESCIMENTO = 0.2 if CRESCIMENTO < 0.2 else CRESCIMENTO\n",
|
||
"\n",
|
||
"df_final['CRESCIMENTO_GERAL'] = CRESCIMENTO\n",
|
||
"\n",
|
||
"CRESCIMENTO\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 71,
|
||
"id": "a9647c32",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_final = df_final.drop(columns='Ciclo_y')\n",
|
||
"\n",
|
||
"df_final = df_final.rename(columns={'Ciclo_x': 'Ciclo',\t'INICIO CICLO_x': 'INICIO CICLO',\t'FIM CICLO_x':'FIM CICLO' ,'DURAÇÃO_x':'DURAÇÃO',\n",
|
||
" \t'INICIO CICLO_y': 'INICIO CICLO SIMILAR' ,\t'FIM CICLO_y': 'FIM CICLO SIMILAR','DURAÇÃO_y':'DURAÇÃO CICLO SIMILAR'})"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 72,
|
||
"id": "b107e519",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"Index(['Histórico de Vendas do Ciclo 202504',\n",
|
||
" 'Histórico de Vendas do Ciclo 202505',\n",
|
||
" 'Histórico de Vendas do Ciclo 202506',\n",
|
||
" 'Histórico de Vendas do Ciclo 202507',\n",
|
||
" 'Histórico de Vendas do Ciclo 202508',\n",
|
||
" 'Histórico de Vendas do Ciclo 202509',\n",
|
||
" 'Histórico de Vendas do Ciclo Atual'],\n",
|
||
" dtype='object')"
|
||
]
|
||
},
|
||
"execution_count": 72,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_final.columns[40:47]"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 73,
|
||
"id": "8290853c",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"VENDA_SIMILAR_6_MESES= df_final.columns[40:47]\n",
|
||
"\n",
|
||
"df_final['Pico Vendas Similar Ultimos 6 ciclos'] = df_final[VENDA_SIMILAR_6_MESES].max(axis=1)\n",
|
||
"\n",
|
||
"df_final['Pico Vendas Similar Ultimos 6 ciclos'] = df_final['Pico Vendas Similar Ultimos 6 ciclos'].fillna(0)\n",
|
||
"\n",
|
||
"df_final['MEDIANA DO HISTÓRICO'] = df_final[colunas_mensais].median(axis=1, skipna=True)\n",
|
||
"\n",
|
||
"\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 74,
|
||
"id": "d8b30560",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"0 2.0\n",
|
||
"1 2.0\n",
|
||
"2 0.0\n",
|
||
"3 0.0\n",
|
||
"4 1.0\n",
|
||
" ... \n",
|
||
"2286 0.0\n",
|
||
"2287 0.0\n",
|
||
"2288 0.0\n",
|
||
"2289 0.0\n",
|
||
"2290 0.0\n",
|
||
"Length: 2291, dtype: float64"
|
||
]
|
||
},
|
||
"execution_count": 74,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_final[colunas_mensais].median(axis=1, skipna=True)\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 75,
|
||
"id": "07f043f2",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<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>CANAL</th>\n",
|
||
" <th>UF</th>\n",
|
||
" <th>med_por_canal</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>CD</td>\n",
|
||
" <td>AL</td>\n",
|
||
" <td>618.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>HIB</td>\n",
|
||
" <td>AL</td>\n",
|
||
" <td>50.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>HIB</td>\n",
|
||
" <td>BA</td>\n",
|
||
" <td>96.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>HIB</td>\n",
|
||
" <td>BA3</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>HIB</td>\n",
|
||
" <td>SE</td>\n",
|
||
" <td>42.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>5</th>\n",
|
||
" <td>LJ</td>\n",
|
||
" <td>AL</td>\n",
|
||
" <td>87.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>6</th>\n",
|
||
" <td>LJ</td>\n",
|
||
" <td>BA</td>\n",
|
||
" <td>25.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>7</th>\n",
|
||
" <td>LJ</td>\n",
|
||
" <td>BA3</td>\n",
|
||
" <td>19.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>8</th>\n",
|
||
" <td>LJ</td>\n",
|
||
" <td>SE</td>\n",
|
||
" <td>20.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>9</th>\n",
|
||
" <td>VD</td>\n",
|
||
" <td>AL</td>\n",
|
||
" <td>202.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>10</th>\n",
|
||
" <td>VD</td>\n",
|
||
" <td>BA</td>\n",
|
||
" <td>205.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>11</th>\n",
|
||
" <td>VD</td>\n",
|
||
" <td>BA3</td>\n",
|
||
" <td>47.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>12</th>\n",
|
||
" <td>VD</td>\n",
|
||
" <td>SE</td>\n",
|
||
" <td>164.0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" CANAL UF med_por_canal\n",
|
||
"0 CD AL 618.0\n",
|
||
"1 HIB AL 50.0\n",
|
||
"2 HIB BA 96.0\n",
|
||
"3 HIB BA3 0.0\n",
|
||
"4 HIB SE 42.0\n",
|
||
"5 LJ AL 87.0\n",
|
||
"6 LJ BA 25.0\n",
|
||
"7 LJ BA3 19.0\n",
|
||
"8 LJ SE 20.0\n",
|
||
"9 VD AL 202.0\n",
|
||
"10 VD BA 205.0\n",
|
||
"11 VD BA3 47.0\n",
|
||
"12 VD SE 164.0"
|
||
]
|
||
},
|
||
"execution_count": 75,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"medi = df_final.groupby(['CANAL','UF'])['MEDIANA DO HISTÓRICO'].max().reset_index()\n",
|
||
"medi = medi.rename(columns={'MEDIANA DO HISTÓRICO':'med_por_canal'})\n",
|
||
"medi"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 76,
|
||
"id": "94abddce",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"#df_final = pd.merge(left=df_final, right=medi,on=['CANAL','UF'],how='inner')\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 77,
|
||
"id": "c4fbc613",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"0 LANÇAMENTO\n",
|
||
"1 LANÇAMENTO\n",
|
||
"2 LANÇAMENTO\n",
|
||
"3 LANÇAMENTO\n",
|
||
"4 LANÇAMENTO\n",
|
||
" ... \n",
|
||
"2286 PROMOÇÃO\n",
|
||
"2287 PROMOÇÃO\n",
|
||
"2288 PROMOÇÃO\n",
|
||
"2289 PROMOÇÃO\n",
|
||
"2290 PROMOÇÃO\n",
|
||
"Name: TIPO DE PRODUTO, Length: 2291, dtype: object"
|
||
]
|
||
},
|
||
"execution_count": 77,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_final['TIPO DE PRODUTO']"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 78,
|
||
"id": "df26720c",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<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 Lançamento</th>\n",
|
||
" <th>Ciclo</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>12522</td>\n",
|
||
" <td>51944</td>\n",
|
||
" <td>COFFEE DES COL MAN SEDUC TCH PRM 10ml</td>\n",
|
||
" <td>11</td>\n",
|
||
" <td>C202307</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>20998</td>\n",
|
||
" <td>77557</td>\n",
|
||
" <td>QDB BASE LIQ SUPERMAT COR 06 Q 30ml RPCK</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>C202405</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>20858</td>\n",
|
||
" <td>74103</td>\n",
|
||
" <td>GLAMOUR DES COL SEC BL 75ml V4</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>C202409</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>5699</td>\n",
|
||
" <td>47950</td>\n",
|
||
" <td>ZAAD EDP 95ml V6</td>\n",
|
||
" <td>12</td>\n",
|
||
" <td>C202406</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>20993</td>\n",
|
||
" <td>50297</td>\n",
|
||
" <td>ESTJ DEM LILY ESSENCE 4x4ml</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>C202416</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" PDV SKU DESCRICAO \\\n",
|
||
"0 12522 51944 COFFEE DES COL MAN SEDUC TCH PRM 10ml \n",
|
||
"1 20998 77557 QDB BASE LIQ SUPERMAT COR 06 Q 30ml RPCK \n",
|
||
"2 20858 74103 GLAMOUR DES COL SEC BL 75ml V4 \n",
|
||
"3 5699 47950 ZAAD EDP 95ml V6 \n",
|
||
"4 20993 50297 ESTJ DEM LILY ESSENCE 4x4ml \n",
|
||
"\n",
|
||
" Vendas Ciclo Lançamento Ciclo \n",
|
||
"0 11 C202307 \n",
|
||
"1 1 C202405 \n",
|
||
"2 5 C202409 \n",
|
||
"3 12 C202406 \n",
|
||
"4 2 C202416 "
|
||
]
|
||
},
|
||
"execution_count": 78,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_venda_diaria.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 79,
|
||
"id": "ef979be5",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_dourado = pd.read_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\DADOS DOURADO\\VENDA\\compilado de vendas.xlsx\")\n",
|
||
"\n",
|
||
"df_dourado['Data de venda'] = pd.to_datetime(df_dourado['Data de venda'], dayfirst=True)\n",
|
||
"\n",
|
||
"df_dourado['de para pdv'] = df_dourado['de para pdv'].astype(str)\n",
|
||
"\n",
|
||
"df_dourado['de para pdv'] = df_dourado['de para pdv'].str.replace(r'\\.0$', '', regex=True)\n",
|
||
"\n",
|
||
"# 'Dia' já está em formato datetime, então renomeamos para 'Data' diretamente\n",
|
||
"# ou apenas usamos 'Dia' como referência de data\n",
|
||
"\n",
|
||
"# Ordena o DataFrame para garantir que a cumulativa funcione corretamente\n",
|
||
"df_venda_diaria = df_venda_diaria.sort_values(by=['PDV', 'SKU', 'Ciclo'])\n",
|
||
"\n",
|
||
"# Calcula a quantidade acumulada até o dia para cada grupo\n",
|
||
"df_dourado['Quantidade Acumulada dourado'] = (\n",
|
||
" df_dourado\n",
|
||
" .groupby(['de para pdv', 'sku'])['Quantidade Vendida']\n",
|
||
" .cumsum()\n",
|
||
") # acumulado por grupo até a data da linha\n",
|
||
"\n",
|
||
"df_dourado = pd.merge(left=df_dourado,right=calendario[['Date','Ciclo']],left_on='Data de venda',right_on='Date',how='inner')\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"df_dourado_agrupado = df_dourado.groupby(['de para pdv','sku','Ciclo'])['Quantidade Acumulada dourado'].max().reset_index()\n",
|
||
"\n",
|
||
"df_dourado_agrupado = df_dourado_agrupado.rename(columns={'Ciclo':'Ciclo dourado'})\n",
|
||
"\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 80,
|
||
"id": "41eb7ebf",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"0 12522\n",
|
||
"1 12817\n",
|
||
"2 12818\n",
|
||
"3 12820\n",
|
||
"4 12823\n",
|
||
"Name: PDV, dtype: object"
|
||
]
|
||
},
|
||
"execution_count": 80,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_final['PDV'] = df_final['PDV'].astype(str)\n",
|
||
"df_final['PDV'].head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 81,
|
||
"id": "6dbe67bb",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_final = pd.merge(left=df_final, right = df_dourado_agrupado, right_on=['Ciclo dourado','sku','de para pdv'],left_on=['CICLO SIMILAR','PRODUTO SIMILAR','PDV'],how='left')\n",
|
||
"\n",
|
||
"df_final['Quantidade Acumulada dourado'] = df_final['Quantidade Acumulada dourado'].fillna(0)\n",
|
||
"\n",
|
||
"\n",
|
||
"df_final['Vendas Ciclo Lançamento'] = np.where(df_final['Quantidade Acumulada dourado'] > 0, df_final['Quantidade Acumulada dourado'], df_final['Vendas Ciclo Lançamento'])\n",
|
||
"\n",
|
||
"df_final = df_final.drop(columns='Quantidade Acumulada dourado')\n",
|
||
"\n",
|
||
"\n",
|
||
"df_final = df_final.drop(columns='Ciclo dourado')"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 82,
|
||
"id": "7986b8fa",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<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>CP VIVA BEM</th>\n",
|
||
" <th>Protheus</th>\n",
|
||
" <th>PDVDEPARA.Practico</th>\n",
|
||
" <th>Canal</th>\n",
|
||
" <th>Endereço</th>\n",
|
||
" <th>CNPJ</th>\n",
|
||
" <th>CNPJ Locação</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>3559</td>\n",
|
||
" <td>70101.0</td>\n",
|
||
" <td>23713.0</td>\n",
|
||
" <td>MATRIZ - LJ</td>\n",
|
||
" <td>Rua Zeferino Correia, nº 17, Centro, CEP 45.00...</td>\n",
|
||
" <td>14.378.160/0001-83</td>\n",
|
||
" <td>14.378.160/0001-83</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>7292</td>\n",
|
||
" <td>70103.0</td>\n",
|
||
" <td>23712.0</td>\n",
|
||
" <td>LOJA</td>\n",
|
||
" <td>Al. Rio Branco, nº 373, Centro, Cândido Sales ...</td>\n",
|
||
" <td>14.378.160/0006-98</td>\n",
|
||
" <td>14.378.160/0006-98</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>8708</td>\n",
|
||
" <td>70102.0</td>\n",
|
||
" <td>23711.0</td>\n",
|
||
" <td>VD</td>\n",
|
||
" <td>Al. Lima Guerra, nº 04, Centro, Vitória da Con...</td>\n",
|
||
" <td>14.378.160/0005-07</td>\n",
|
||
" <td>14.378.160/0001-83</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>8931</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>23710.0</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Avenida Rosa Cruz, nº 80, Hiper B Preço Loja B...</td>\n",
|
||
" <td>14.378.160/0008-50</td>\n",
|
||
" <td>14.378.160/0008-50</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>11191</td>\n",
|
||
" <td>70108.0</td>\n",
|
||
" <td>23709.0</td>\n",
|
||
" <td>LOJA</td>\n",
|
||
" <td>Av. Juracy Magalhães, nº 3340, Shopping Conqui...</td>\n",
|
||
" <td>14.378.160/0009-30</td>\n",
|
||
" <td>14.378.160/0001-83</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" CP VIVA BEM Protheus PDVDEPARA.Practico Canal \\\n",
|
||
"0 3559 70101.0 23713.0 MATRIZ - LJ \n",
|
||
"1 7292 70103.0 23712.0 LOJA \n",
|
||
"2 8708 70102.0 23711.0 VD \n",
|
||
"3 8931 NaN 23710.0 NaN \n",
|
||
"4 11191 70108.0 23709.0 LOJA \n",
|
||
"\n",
|
||
" Endereço CNPJ \\\n",
|
||
"0 Rua Zeferino Correia, nº 17, Centro, CEP 45.00... 14.378.160/0001-83 \n",
|
||
"1 Al. Rio Branco, nº 373, Centro, Cândido Sales ... 14.378.160/0006-98 \n",
|
||
"2 Al. Lima Guerra, nº 04, Centro, Vitória da Con... 14.378.160/0005-07 \n",
|
||
"3 Avenida Rosa Cruz, nº 80, Hiper B Preço Loja B... 14.378.160/0008-50 \n",
|
||
"4 Av. Juracy Magalhães, nº 3340, Shopping Conqui... 14.378.160/0009-30 \n",
|
||
"\n",
|
||
" CNPJ Locação \n",
|
||
"0 14.378.160/0001-83 \n",
|
||
"1 14.378.160/0006-98 \n",
|
||
"2 14.378.160/0001-83 \n",
|
||
"3 14.378.160/0008-50 \n",
|
||
"4 14.378.160/0001-83 "
|
||
]
|
||
},
|
||
"execution_count": 82,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_depara_vdc = pd.read_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\Vitoria da Conquista\\HISTORICO VENDAS VITORIA DA CONQUISTA\\Filiais - Vitoria da Conquista 4.xlsx\")\n",
|
||
"\n",
|
||
"df_depara_vdc.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 83,
|
||
"id": "09efe938",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_vdc = pd.read_parquet(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\Vitoria da Conquista\\HISTORICO VENDAS VITORIA DA CONQUISTA\\VENDAS VITORIA DA CONQUISTA\\concatenado.parquet\")\n",
|
||
"\n",
|
||
"df_vdc['PDV'] = df_vdc['Quebra'].str.split(\" -\").str[0]\n",
|
||
"\n",
|
||
"df_vdc['PDV'] = df_vdc['PDV'].astype('int64')\n",
|
||
"\n",
|
||
"df_vdc = df_vdc.rename(columns={'Quebra2':'DATA VENDA'})\n",
|
||
"\n",
|
||
"df_vdc['DATA VENDA'] = pd.to_datetime(df_vdc['DATA VENDA'], format='%d/%m/%Y')"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 84,
|
||
"id": "330154b2",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_vdc = pd.merge(df_vdc,df_depara_vdc[['CP VIVA BEM','PDVDEPARA.Practico']],left_on='PDV',right_on='CP VIVA BEM',how='inner')\n",
|
||
"\n",
|
||
"df_vdc['Quantidade'] = df_vdc['Quantidade'].str.replace(r',000$','',regex=True)\n",
|
||
"\n",
|
||
"df_vdc['Quantidade'] = df_vdc['Quantidade'].astype('Int64') "
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 85,
|
||
"id": "09cc2f82",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"# 'Dia' já está em formato datetime, então renomeamos para 'Data' diretamente\n",
|
||
"# ou apenas usamos 'Dia' como referência de data\n",
|
||
"\n",
|
||
"# Ordena o DataFrame para garantir que a cumulativa funcione corretamente\n",
|
||
"#df_venda_diaria = df_venda_diaria.sort_values(by=['PDV', 'SKU', 'Ciclo'])\n",
|
||
"\n",
|
||
"# Calcula a quantidade acumulada até o dia para cada grupo\n",
|
||
"df_vdc['Quantidade Acumulada vdc'] = (\n",
|
||
" df_vdc\n",
|
||
" .groupby(['PDVDEPARA.Practico', 'Código'])['Quantidade']\n",
|
||
" .cumsum()\n",
|
||
") # acumulado por grupo até a data da linha"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 86,
|
||
"id": "5a827c08",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<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>PDVDEPARA.Practico</th>\n",
|
||
" <th>Código</th>\n",
|
||
" <th>Ciclo vdc</th>\n",
|
||
" <th>Quantidade Acumulada vdc</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>23701</td>\n",
|
||
" <td>1004</td>\n",
|
||
" <td>C202203</td>\n",
|
||
" <td>139.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>23701</td>\n",
|
||
" <td>1004</td>\n",
|
||
" <td>C202204</td>\n",
|
||
" <td>161.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>23701</td>\n",
|
||
" <td>1004</td>\n",
|
||
" <td>C202205</td>\n",
|
||
" <td>162.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>23701</td>\n",
|
||
" <td>1004</td>\n",
|
||
" <td>C202206</td>\n",
|
||
" <td>9.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>23701</td>\n",
|
||
" <td>1004</td>\n",
|
||
" <td>C202207</td>\n",
|
||
" <td>15.0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" PDVDEPARA.Practico Código Ciclo vdc Quantidade Acumulada vdc\n",
|
||
"0 23701 1004 C202203 139.0\n",
|
||
"1 23701 1004 C202204 161.0\n",
|
||
"2 23701 1004 C202205 162.0\n",
|
||
"3 23701 1004 C202206 9.0\n",
|
||
"4 23701 1004 C202207 15.0"
|
||
]
|
||
},
|
||
"execution_count": 86,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_vdc = pd.merge(left=df_vdc,right=calendario[['Date','Ciclo']],left_on='DATA VENDA',right_on='Date',how='inner')\n",
|
||
"\n",
|
||
"df_vdc_agrupado = df_vdc.groupby(['PDVDEPARA.Practico',\t'Código','Ciclo'])['Quantidade Acumulada vdc'].max().reset_index()\n",
|
||
"\n",
|
||
"df_vdc_agrupado = df_vdc_agrupado.rename(columns={'Ciclo':'Ciclo vdc'})\n",
|
||
"\n",
|
||
"\n",
|
||
"df_vdc_agrupado['PDVDEPARA.Practico'] = df_vdc_agrupado['PDVDEPARA.Practico'].astype(str).str.replace(r'\\.0$', '', regex=True)\n",
|
||
"df_vdc_agrupado.head()\n",
|
||
"\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 87,
|
||
"id": "4933b6d2",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"C:\\Users\\joao.herculano\\AppData\\Local\\Temp\\ipykernel_101180\\3455958411.py:3: FutureWarning: DataFrame.replace without 'value' and with non-dict-like 'to_replace' is deprecated and will raise in a future version. Explicitly specify the new values instead.\n",
|
||
" df_vdc_agrupado = df_vdc_agrupado.replace()\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"df_vdc_agrupado = df_vdc_agrupado.astype(str)\n",
|
||
"\n",
|
||
"df_vdc_agrupado = df_vdc_agrupado.replace()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 88,
|
||
"id": "8d5f2c33",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"#df_vdc.to_excel(r\"C:\\Users\\joao.herculano\\Documents\\df_vdc.xlsx\",index=False)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 89,
|
||
"id": "63fea2ea",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"0 23701\n",
|
||
"1 23701\n",
|
||
"2 23701\n",
|
||
"3 23701\n",
|
||
"4 23701\n",
|
||
"Name: PDVDEPARA.Practico, dtype: object"
|
||
]
|
||
},
|
||
"execution_count": 89,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_vdc_agrupado['PDVDEPARA.Practico'] = df_vdc_agrupado['PDVDEPARA.Practico'].astype(str)\n",
|
||
"\n",
|
||
"df_vdc_agrupado['PDVDEPARA.Practico'].head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 90,
|
||
"id": "84b5917c",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_final['PRODUTO SIMILAR'] = df_final['PRODUTO SIMILAR'].astype('Int64')"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 91,
|
||
"id": "ca911bd1",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_vdc_agrupado['Código'] = df_vdc_agrupado['Código'].astype('Int64')"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 92,
|
||
"id": "8ec14143",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_final = pd.merge(left=df_final, right = df_vdc_agrupado, right_on=['Ciclo vdc','Código','PDVDEPARA.Practico'],left_on=['CICLO SIMILAR','PRODUTO SIMILAR','PDV'],how='left')\n",
|
||
"\n",
|
||
"df_final['Quantidade Acumulada vdc'] = pd.to_numeric(\n",
|
||
" df_final['Quantidade Acumulada vdc'],\n",
|
||
" errors='coerce' # valores inválidos viram NaN\n",
|
||
").fillna(0).astype('Int64')\n",
|
||
"\n",
|
||
"\n",
|
||
"df_final['Vendas Ciclo Lançamento'] = np.where(df_final['Quantidade Acumulada vdc'] > 0, df_final['Quantidade Acumulada vdc'], df_final['Vendas Ciclo Lançamento'])\n",
|
||
"\n",
|
||
"df_final = df_final.drop(columns='Quantidade Acumulada vdc')\n",
|
||
"\n",
|
||
"\n",
|
||
"df_final = df_final.drop(columns='Ciclo vdc')\n",
|
||
"\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 93,
|
||
"id": "1a625e69",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"(2291, 108)"
|
||
]
|
||
},
|
||
"execution_count": 93,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"\n",
|
||
"# Cálculo do crescimento\n",
|
||
"crescimento_final = df_final['CRESCIMENTO_GERAL'] + df_final['CRESCIMENTO']\n",
|
||
"crescimento_final = crescimento_final.clip(lower=0.2, upper=0.8) # limita entre 0 e 0.8\n",
|
||
"df_final['CRESCIMENTO_FINAL'] = crescimento_final\n",
|
||
"\n",
|
||
"df_final['CRESCIMENTO_FINAL'] = np.where(df_final['CRESCIMENTO_FINAL'].isna(),df_final['CRESCIMENTO_GERAL'],df_final['CRESCIMENTO_FINAL'])\n",
|
||
"\n",
|
||
"df_final['CRESCIMENTO_FINAL'] = df_final['CRESCIMENTO_FINAL'].fillna(0)\n",
|
||
"\n",
|
||
"df_final['MEDIANA DO HISTÓRICO'] = df_final['MEDIANA DO HISTÓRICO'].fillna(0)\n",
|
||
"\n",
|
||
"# Corrige mediana do histórico onde for zero\n",
|
||
"df_final['MEDIANA DO HISTÓRICO'] = np.where(\n",
|
||
" df_final['MEDIANA DO HISTÓRICO'] == 0,\n",
|
||
" 0,\n",
|
||
" df_final['MEDIANA DO HISTÓRICO']\n",
|
||
")\n",
|
||
"\n",
|
||
"df_final['MEDIANA DO HISTÓRICO'] = df_final['MEDIANA DO HISTÓRICO'].fillna(0)\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"# Cálculo do PV GINSENG\n",
|
||
"pv_crescimento = (df_final['CRESCIMENTO_FINAL']+1) * df_final['Vendas Ciclo Lançamento']\n",
|
||
"pv_mediana = (df_final['CRESCIMENTO_FINAL'] + 1) * df_final['MEDIANA DO HISTÓRICO']\n",
|
||
"\n",
|
||
"df_final['PV GINSENG'] = np.where(\n",
|
||
" pv_crescimento < df_final['MEDIANA DO HISTÓRICO'],\n",
|
||
" pv_mediana.round(0),\n",
|
||
" pv_crescimento.round(0)\n",
|
||
")\n",
|
||
"\n",
|
||
"# Se PV GINSENG for NA, substitui pela média por canal\n",
|
||
"df_final['PV GINSENG'] = df_final['PV GINSENG'].fillna(0)\n",
|
||
"\n",
|
||
"df_final['PV GINSENG'] = df_final['PV GINSENG'].round(0).astype(int)\n",
|
||
"\n",
|
||
"df_final.shape\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 94,
|
||
"id": "cfdae71d",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_final.to_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\BD_LANÇAMENTOS\\BOT\\BOT - C12\\LANÇAMENTOS\\validação.xlsx\",index=False)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 95,
|
||
"id": "ad10c069",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Index(['Histórico de Vendas do Ciclo 202411',\n",
|
||
" 'Histórico de Vendas do Ciclo 202412',\n",
|
||
" 'Histórico de Vendas do Ciclo 202413',\n",
|
||
" 'Histórico de Vendas do Ciclo 202414',\n",
|
||
" 'Histórico de Vendas do Ciclo 202415',\n",
|
||
" 'Histórico de Vendas do Ciclo 202416',\n",
|
||
" 'Histórico de Vendas do Ciclo 202417',\n",
|
||
" 'Histórico de Vendas do Ciclo 202501',\n",
|
||
" 'Histórico de Vendas do Ciclo 202502',\n",
|
||
" 'Histórico de Vendas do Ciclo 202503',\n",
|
||
" 'Histórico de Vendas do Ciclo 202504',\n",
|
||
" 'Histórico de Vendas do Ciclo 202505',\n",
|
||
" 'Histórico de Vendas do Ciclo 202506'],\n",
|
||
" dtype='object')\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"print(df_final.columns[30:43])\n",
|
||
"\n",
|
||
"df_final.drop(columns=df_final.columns[30:43],inplace=True)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 96,
|
||
"id": "3b7f3a82",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"Index(['Histórico de Vendas do Ciclo 202410',\n",
|
||
" 'Histórico de Vendas do Ciclo 202507',\n",
|
||
" 'Histórico de Vendas do Ciclo 202508',\n",
|
||
" 'Histórico de Vendas do Ciclo 202509',\n",
|
||
" 'Histórico de Vendas do Ciclo Atual'],\n",
|
||
" dtype='object')"
|
||
]
|
||
},
|
||
"execution_count": 96,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_final.columns[29:34]"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 97,
|
||
"id": "15b7149f",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_final = df_final.rename(columns={df_final.columns[30]: \"C-4\", df_final.columns[31]: \"C-3\",df_final.columns[32]: \"C-2\",df_final.columns[29]: \"C-1\",df_final.columns[33]:'VENDAS CICLO ATUAL'})\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 98,
|
||
"id": "9333bc77",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"Index(['PRODUTO LANÇAMENTO', 'DESCRIÇÃO DO LANÇAMENTO', 'PRODUTO SIMILAR',\n",
|
||
" 'DESCRIÇÃO SIMILAR', 'CICLO SIMILAR', 'FOCO', 'IAF', 'CATEGORIA',\n",
|
||
" 'MARCA', '% CONSUMIDOR', 'MECANICA CONSUMIDOR', '% REVENDEDOR',\n",
|
||
" 'MECANICA REVENDEDOR', 'TIPO DE PRODUTO', 'MATCH', 'PDV', 'CANAL',\n",
|
||
" 'DESCRIÇÃO PDV', 'PDV DESC', 'UF', 'ANALISTA', 'SUPERVISOR', 'STATUS',\n",
|
||
" 'CLASSE', 'SKU_X', 'DESCRIÇÃO', 'SUBCATEGORIA', 'LANÇAMENTO',\n",
|
||
" 'DESATIVAÇÃO', 'C-1', 'C-4', 'C-3', 'C-2', 'VENDAS CICLO ATUAL',\n",
|
||
" 'DIAS SEM VENDA', 'PROJEÇÃO PRÓXIMO CICLO',\n",
|
||
" 'PROJEÇÃO PRÓXIMO CICLO + 1', 'PROMOÇÃO PRÓXIMO CICLO',\n",
|
||
" 'PROMOÇÃO PRÓXIMO CICLO + 1', 'ESTOQUE ATUAL', 'ESTOQUE EM TRANSITO',\n",
|
||
" 'PEDIDO PENDENTE', 'COMPRA INTELIGENTE SEMANAL/SUGESTÃO DE COMPRA',\n",
|
||
" 'COMPRA INTELIGENTE PRÓXIMO CICLO',\n",
|
||
" 'COMPRA INTELIGENTE PRÓXIMO CICLO + 1', 'ITEM DESATIVADO',\n",
|
||
" 'DATA PREVISTA REGULARIZAÇÃO', 'CARTEIRA BLOQUEADA PARA NOVOS PEDIDOS',\n",
|
||
" 'PLANOGRAMA', 'QUANTIDADE POR CAIXA', 'PREÇO SELL IN', 'QUANTIDADE',\n",
|
||
" 'ITEM ANALISADO', 'MATCH_X', 'CRESCIMENTO', 'CICLO', 'INICIO CICLO',\n",
|
||
" 'FIM CICLO', 'DURAÇÃO', 'MATCH_Y', 'DIAS_ATE_INICIO',\n",
|
||
" 'INICIO CICLO SIMILAR', 'FIM CICLO SIMILAR', 'DURAÇÃO CICLO SIMILAR',\n",
|
||
" 'SKU_Y', 'CICLO', 'VENDAS CICLO LANÇAMENTO', 'SKU', '202408', '202409',\n",
|
||
" '202410', '202411', '202412', '202413', '202414', '202415', '202416',\n",
|
||
" '202417', '202501', '202502', '202503', '202504', '202505', '202506',\n",
|
||
" '202507', 'CRESCIMENTO_GERAL', 'PICO VENDAS SIMILAR ULTIMOS 6 CICLOS',\n",
|
||
" 'MEDIANA DO HISTÓRICO', 'DE PARA PDV', 'SKU', 'PDVDEPARA.PRACTICO',\n",
|
||
" 'CÓDIGO', 'CRESCIMENTO_FINAL', 'PV GINSENG'],\n",
|
||
" dtype='object')"
|
||
]
|
||
},
|
||
"execution_count": 98,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_final.columns = df_final.columns.str.upper()\n",
|
||
"\n",
|
||
"df_final.drop(columns=df_final.filter(regex='HISTÓRICO DE VENDAS DO CICLO').columns, inplace=True)\n",
|
||
"\n",
|
||
"df_final.columns"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 99,
|
||
"id": "dceebd16",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_final = df_final.rename(columns={'MARCA_X':'MARCA'})"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 100,
|
||
"id": "62ce5c62",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"(2291, 94)"
|
||
]
|
||
},
|
||
"execution_count": 100,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_final.shape"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 101,
|
||
"id": "cecca116",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_final[['C-4', 'C-3', 'C-2', 'C-1', 'VENDAS CICLO ATUAL']] = df_final[['C-4', 'C-3', 'C-2', 'C-1', 'VENDAS CICLO ATUAL']].fillna(0)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 102,
|
||
"id": "8ad318b0",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_final = df_final.loc[:, ~df_final.columns.duplicated()]\n",
|
||
"\n",
|
||
"colunas_desejadas = [\n",
|
||
" 'SUPERVISOR',\n",
|
||
" 'ANALISTA',\n",
|
||
" 'CANAL',\n",
|
||
" 'UF',\n",
|
||
" 'PDV',\n",
|
||
" 'DESCRIÇÃO PDV',\n",
|
||
" 'PRODUTO LANÇAMENTO',\n",
|
||
" 'DESCRIÇÃO DO LANÇAMENTO',\n",
|
||
" 'MARCA',\n",
|
||
" 'CATEGORIA',\n",
|
||
" '% CONSUMIDOR',\n",
|
||
" 'MECANICA CONSUMIDOR',\n",
|
||
" '% REVENDEDOR',\n",
|
||
" 'MECANICA REVENDEDOR',\n",
|
||
" 'TIPO DE PRODUTO',\n",
|
||
" 'IAF',\n",
|
||
" 'FOCO',\n",
|
||
" 'PRODUTO SIMILAR',\n",
|
||
" 'DESCRIÇÃO SIMILAR',\n",
|
||
" 'CICLO SIMILAR',\n",
|
||
" 'VENDAS CICLO LANÇAMENTO',\n",
|
||
" 'C-4',\n",
|
||
" 'C-3',\n",
|
||
" 'C-2',\n",
|
||
" 'C-1',\n",
|
||
" 'VENDAS CICLO ATUAL',\n",
|
||
" 'PICO VENDAS SIMILAR ULTIMOS 6 CICLOS',\n",
|
||
" 'PV GINSENG'\n",
|
||
"]\n",
|
||
"\n",
|
||
"df_final = df_final.reindex(columns=colunas_desejadas)\n",
|
||
"\n",
|
||
"colunas_filtradas = [col for col in colunas_desejadas if col in df_final.columns]\n",
|
||
"df_final = df_final[colunas_filtradas]\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 103,
|
||
"id": "25cbff26",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"\"df_final = df_final.reindex(columns=[\\n 'SUPERVISOR',\\n 'ANALISTA',\\n 'CANAL',\\n 'UF',\\n 'PDV',\\n 'DESCRIÇÃO PDV',\\n 'PRODUTO LANÇAMENTO',\\n 'DESCRIÇÃO DO LANÇAMENTO',\\n 'MARCA',\\n 'CATEGORIA',\\n 'MECANICA CONSUMIDOR',\\n '% CONSUMIDOR',\\n 'MECANICA REVENDEDOR',\\n '% REVENDEDOR',\\n 'TIPO DE PRODUTO',\\n 'IAF',\\n 'FOCO',\\n 'PRODUTO SIMILAR',\\n 'DESCRIÇÃO SIMILAR',\\n 'CICLO SIMILAR',\\n 'VENDAS CICLO LANÇAMENTO',\\n 'C-4',\\n 'C-3',\\n 'C-2',\\n 'C-1',\\n 'VENDAS CICLO ATUAL',\\n 'PICO VENDAS SIMILAR ULTIMOS 6 CICLOS',\\n 'PV GINSENG'])\\n\""
|
||
]
|
||
},
|
||
"execution_count": 103,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"'''df_final = df_final.reindex(columns=[\n",
|
||
" 'SUPERVISOR',\n",
|
||
" 'ANALISTA',\n",
|
||
" 'CANAL',\n",
|
||
" 'UF',\n",
|
||
" 'PDV',\n",
|
||
" 'DESCRIÇÃO PDV',\n",
|
||
" 'PRODUTO LANÇAMENTO',\n",
|
||
" 'DESCRIÇÃO DO LANÇAMENTO',\n",
|
||
" 'MARCA',\n",
|
||
" 'CATEGORIA',\n",
|
||
" 'MECANICA CONSUMIDOR',\n",
|
||
" '% CONSUMIDOR',\n",
|
||
" 'MECANICA REVENDEDOR',\n",
|
||
" '% REVENDEDOR',\n",
|
||
" 'TIPO DE PRODUTO',\n",
|
||
" 'IAF',\n",
|
||
" 'FOCO',\n",
|
||
" 'PRODUTO SIMILAR',\n",
|
||
" 'DESCRIÇÃO SIMILAR',\n",
|
||
" 'CICLO SIMILAR',\n",
|
||
" 'VENDAS CICLO LANÇAMENTO',\n",
|
||
" 'C-4',\n",
|
||
" 'C-3',\n",
|
||
" 'C-2',\n",
|
||
" 'C-1',\n",
|
||
" 'VENDAS CICLO ATUAL',\n",
|
||
" 'PICO VENDAS SIMILAR ULTIMOS 6 CICLOS',\n",
|
||
" 'PV GINSENG'])\n",
|
||
"'''"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 104,
|
||
"id": "a3e80cb4",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_final['SUGESTÃO METASELLIN'] = ''\n",
|
||
"df_final['SUGESTÃO ABASTECIMENTO'] = ''\n",
|
||
"df_final['SUGESTÃO COMERCIAL'] = ''\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 105,
|
||
"id": "cc9c6ee6",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_pdv_origi['PDV'] = df_pdv_origi['PDV'].astype(str)\n",
|
||
"\n",
|
||
"df_pdv_origi['PDV'].head()\n",
|
||
"\n",
|
||
"df_pdv_origi = df_pdv_origi.rename(columns={'UF':'UF_CERTO'})"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 106,
|
||
"id": "df9f0130",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_final= pd.merge(df_final,df_pdv_origi[['UF_CERTO','PDV']],on='PDV',how='inner')"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 107,
|
||
"id": "7778d82f",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"Index(['SUPERVISOR', 'ANALISTA', 'CANAL', 'UF', 'PDV', 'DESCRIÇÃO PDV',\n",
|
||
" 'PRODUTO LANÇAMENTO', 'DESCRIÇÃO DO LANÇAMENTO', 'MARCA', 'CATEGORIA',\n",
|
||
" '% CONSUMIDOR', 'MECANICA CONSUMIDOR', '% REVENDEDOR',\n",
|
||
" 'MECANICA REVENDEDOR', 'TIPO DE PRODUTO', 'IAF', 'FOCO',\n",
|
||
" 'PRODUTO SIMILAR', 'DESCRIÇÃO SIMILAR', 'CICLO SIMILAR',\n",
|
||
" 'VENDAS CICLO LANÇAMENTO', 'C-4', 'C-3', 'C-2', 'C-1',\n",
|
||
" 'VENDAS CICLO ATUAL', 'PICO VENDAS SIMILAR ULTIMOS 6 CICLOS',\n",
|
||
" 'PV GINSENG', 'SUGESTÃO METASELLIN', 'SUGESTÃO ABASTECIMENTO',\n",
|
||
" 'SUGESTÃO COMERCIAL', 'UF_CERTO'],\n",
|
||
" dtype='object')"
|
||
]
|
||
},
|
||
"execution_count": 107,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_final.columns"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 108,
|
||
"id": "f8cd886a",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<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>SUPERVISOR</th>\n",
|
||
" <th>ANALISTA</th>\n",
|
||
" <th>CANAL</th>\n",
|
||
" <th>UF</th>\n",
|
||
" <th>PDV</th>\n",
|
||
" <th>DESCRIÇÃO PDV</th>\n",
|
||
" <th>PRODUTO LANÇAMENTO</th>\n",
|
||
" <th>DESCRIÇÃO DO LANÇAMENTO</th>\n",
|
||
" <th>MARCA</th>\n",
|
||
" <th>CATEGORIA</th>\n",
|
||
" <th>...</th>\n",
|
||
" <th>C-4</th>\n",
|
||
" <th>C-3</th>\n",
|
||
" <th>C-2</th>\n",
|
||
" <th>C-1</th>\n",
|
||
" <th>VENDAS CICLO ATUAL</th>\n",
|
||
" <th>PICO VENDAS SIMILAR ULTIMOS 6 CICLOS</th>\n",
|
||
" <th>PV GINSENG</th>\n",
|
||
" <th>SUGESTÃO METASELLIN</th>\n",
|
||
" <th>SUGESTÃO ABASTECIMENTO</th>\n",
|
||
" <th>SUGESTÃO COMERCIAL</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>Efigênia Herculano</td>\n",
|
||
" <td>LUAN</td>\n",
|
||
" <td>LJ</td>\n",
|
||
" <td>AL</td>\n",
|
||
" <td>12522</td>\n",
|
||
" <td>MACEIO SHOP EXP</td>\n",
|
||
" <td>59823</td>\n",
|
||
" <td>NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...</td>\n",
|
||
" <td>NATIVA SPA</td>\n",
|
||
" <td>CUIDADOS COM A PELE</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>2.0</td>\n",
|
||
" <td>3.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>2.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>3.0</td>\n",
|
||
" <td>27</td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>Maxwell Vieira</td>\n",
|
||
" <td>JEFFERSON</td>\n",
|
||
" <td>LJ</td>\n",
|
||
" <td>AL</td>\n",
|
||
" <td>12817</td>\n",
|
||
" <td>SHOPPING PATIO</td>\n",
|
||
" <td>59823</td>\n",
|
||
" <td>NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...</td>\n",
|
||
" <td>NATIVA SPA</td>\n",
|
||
" <td>CUIDADOS COM A PELE</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>3.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>3.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>5.0</td>\n",
|
||
" <td>43</td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>Maxwell Vieira</td>\n",
|
||
" <td>PEDRO</td>\n",
|
||
" <td>LJ</td>\n",
|
||
" <td>AL</td>\n",
|
||
" <td>12818</td>\n",
|
||
" <td>GB SERRARIA</td>\n",
|
||
" <td>59823</td>\n",
|
||
" <td>NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...</td>\n",
|
||
" <td>NATIVA SPA</td>\n",
|
||
" <td>CUIDADOS COM A PELE</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>4.0</td>\n",
|
||
" <td>2.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>4.0</td>\n",
|
||
" <td>4.0</td>\n",
|
||
" <td>11</td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>Maxwell Vieira</td>\n",
|
||
" <td>THAYLLAN</td>\n",
|
||
" <td>LJ</td>\n",
|
||
" <td>AL</td>\n",
|
||
" <td>12820</td>\n",
|
||
" <td>ATACADÃO</td>\n",
|
||
" <td>59823</td>\n",
|
||
" <td>NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...</td>\n",
|
||
" <td>NATIVA SPA</td>\n",
|
||
" <td>CUIDADOS COM A PELE</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>2.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>2.0</td>\n",
|
||
" <td>3.0</td>\n",
|
||
" <td>6</td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>Efigênia Herculano</td>\n",
|
||
" <td>MARCYARA</td>\n",
|
||
" <td>LJ</td>\n",
|
||
" <td>AL</td>\n",
|
||
" <td>12823</td>\n",
|
||
" <td>PONTA VERDE</td>\n",
|
||
" <td>59823</td>\n",
|
||
" <td>NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ...</td>\n",
|
||
" <td>NATIVA SPA</td>\n",
|
||
" <td>CUIDADOS COM A PELE</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>4.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>5.0</td>\n",
|
||
" <td>5.0</td>\n",
|
||
" <td>7.0</td>\n",
|
||
" <td>34</td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>5 rows × 31 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" SUPERVISOR ANALISTA CANAL UF PDV DESCRIÇÃO PDV \\\n",
|
||
"0 Efigênia Herculano LUAN LJ AL 12522 MACEIO SHOP EXP \n",
|
||
"1 Maxwell Vieira JEFFERSON LJ AL 12817 SHOPPING PATIO \n",
|
||
"2 Maxwell Vieira PEDRO LJ AL 12818 GB SERRARIA \n",
|
||
"3 Maxwell Vieira THAYLLAN LJ AL 12820 ATACADÃO \n",
|
||
"4 Efigênia Herculano MARCYARA LJ AL 12823 PONTA VERDE \n",
|
||
"\n",
|
||
" PRODUTO LANÇAMENTO DESCRIÇÃO DO LANÇAMENTO \\\n",
|
||
"0 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n",
|
||
"1 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n",
|
||
"2 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n",
|
||
"3 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n",
|
||
"4 59823 NATIVA SPA ORQUÍDEA LUMIÈRE CREME DESODORANTE ... \n",
|
||
"\n",
|
||
" MARCA CATEGORIA ... C-4 C-3 C-2 C-1 \\\n",
|
||
"0 NATIVA SPA CUIDADOS COM A PELE ... 2.0 3.0 0.0 2.0 \n",
|
||
"1 NATIVA SPA CUIDADOS COM A PELE ... 3.0 0.0 0.0 3.0 \n",
|
||
"2 NATIVA SPA CUIDADOS COM A PELE ... 4.0 2.0 0.0 1.0 \n",
|
||
"3 NATIVA SPA CUIDADOS COM A PELE ... 0.0 2.0 0.0 1.0 \n",
|
||
"4 NATIVA SPA CUIDADOS COM A PELE ... 4.0 0.0 1.0 5.0 \n",
|
||
"\n",
|
||
" VENDAS CICLO ATUAL PICO VENDAS SIMILAR ULTIMOS 6 CICLOS PV GINSENG \\\n",
|
||
"0 0.0 3.0 27 \n",
|
||
"1 0.0 5.0 43 \n",
|
||
"2 4.0 4.0 11 \n",
|
||
"3 2.0 3.0 6 \n",
|
||
"4 5.0 7.0 34 \n",
|
||
"\n",
|
||
" SUGESTÃO METASELLIN SUGESTÃO ABASTECIMENTO SUGESTÃO COMERCIAL \n",
|
||
"0 \n",
|
||
"1 \n",
|
||
"2 \n",
|
||
"3 \n",
|
||
"4 \n",
|
||
"\n",
|
||
"[5 rows x 31 columns]"
|
||
]
|
||
},
|
||
"execution_count": 108,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_final['UF']= df_final['UF_CERTO']\n",
|
||
"\n",
|
||
"df_final = df_final.drop(columns=['UF_CERTO'])\n",
|
||
"\n",
|
||
"df_final.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 110,
|
||
"id": "2df3e2e9",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_final.to_excel(f'C:/Users/joao.herculano/Documents/Lançamento{hoje}{ciclo_lanc}.xlsx',index=False)"
|
||
]
|
||
}
|
||
],
|
||
"metadata": {
|
||
"kernelspec": {
|
||
"display_name": "Python 3",
|
||
"language": "python",
|
||
"name": "python3"
|
||
},
|
||
"language_info": {
|
||
"codemirror_mode": {
|
||
"name": "ipython",
|
||
"version": 3
|
||
},
|
||
"file_extension": ".py",
|
||
"mimetype": "text/x-python",
|
||
"name": "python",
|
||
"nbconvert_exporter": "python",
|
||
"pygments_lexer": "ipython3",
|
||
"version": "3.13.2"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 5
|
||
}
|