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