Jump to content

ferreg19

Membros
  • Contagem de Conteúdo

    2
  • Ingressou

  • Última visita

Informações Pessoais

  • Cidade
    Salto
  • Estado
    São Paulo (SP)

Clientes & Parceiros

  • Você é um cliente TecnoSpeed?
    Não

Conquistas de ferreg19

1

Reputação na Comunidade

  1. Por gentileza poderiam me ajudar com a seguinte situação em um código de python? Tenho o seguinte código em anexo, e o objetivo dele é me gerar um excel chamado 'Rotas Ativas'. Porém preciso adicionar três novas colunas após a coluna de 'km' e antes da coluna 'Qt_Clientes_Rota', as colunas devem se chamar: 'Insert Time_Min'/ 'Insert Time_Max'/ 'Inactivity Period'. Cada coluna deve fazer o seguinte: 'Insert Time_Max': Agrupe os dados do DataFrame df_all pelas colunas ('ZnOrigem', 'Zona Tsp' e 'Channel Type'). Em seguida, para cada grupo formado, selecione o valor máximo da coluna 'Insert Time' usando a função max(). E depois redefina os índices do DataFrame resultante após o agrupamento. Portanto, df_max conterá o valor máximo de 'Insert Time' para cada combinação única de valores nas colunas 'ZnOrigem', 'Zona Tsp' e 'Channel Type'. 'Insert Time_Min': Agrupe os dados do DataFrame df_all pelas colunas 'ZnOrigem', 'Zona Tsp' e 'Channel Type'. Em seguida, para cada grupo formado, está selecione o valor mínimo da coluna 'Insert Time' usando a função min(). E depois redefina os índices do DataFrame resultante após a operação de agrupamento. Assim, df_min conterá o valor mínimo de 'Insert Time' para cada combinação única de valores nas colunas 'ZnOrigem', 'Zona Tsp' e 'Channel Type'. 'Inactivity Period': Faça a subtração entre a data de hoje, ou seja, a data atual sempre, com a 'Insert Time_Max'. É possível realizar a inclusão dessas três colunas? Tentei realizar esses ajustes com a ajuda do chat GPT, porém ao adicionar essas linhas de código, meu código começa a dar erros de DataFrame, o que é estranho, porque antes disso ele funcionava perfeitamente bem, tanto é, que se eu retiro essas "novas colunas" ele continua funcionando bem. import numpy as np import pandas as pd import os from datetime import date, timedelta, datetime from unidecode import unidecode starttime = datetime.now() print('Status: Importando DataBase') input_path_base = r'C:\Users\Ferreg19\Heineken International\OTM - General\\' input_path_2023 = os.path.join(input_path_base, 'Histórico Bulk Plans\\') input_path_2024 = input_path_base arquivo_transf_2023 = 'Bulk Plan_Transfer.xlsx' arquivo_off_2023 = 'Bulk Plan_OFF.xlsx' arquivo_on_2023 = 'Bulk Plan_ON.xlsx' arquivo_transf_2024 = 'Bulk Plan_Transfer - 2024.xlsx' arquivo_off_2024 = 'Bulk Plan_OFF - 2024.xlsx' arquivo_on_2024 = 'Bulk Plan_ON - 2024.xlsx' df_transf_2023 = pd.read_excel(os.path.join(input_path_2023, arquivo_transf_2023), sheet_name='Bulk Plan', usecols=['Centro', 'Fábrica', 'Cod Cliente', 'Nome do Local de Destino', 'Cidade de Destino', 'Zona Tsp', 'Incoterm', 'Channel Type', 'Insert Time', 'Grupo de Carga', 'DEL LINK'], dtype={'Zona Tsp': str}) df_transf_2023['Channel Type'].replace('DISTRIBUTOR', 'CDA', inplace=True) df_off_2023 = pd.read_excel(os.path.join(input_path_2023, arquivo_off_2023), sheet_name='Bulk Plan', usecols=['Centro', 'Fábrica', 'Cod Cliente', 'Nome do Local de Destino', 'Cidade de Destino', 'Zona Tsp', 'Incoterm', 'Channel Type', 'Insert Time', 'Grupo de Carga', 'DEL LINK'], dtype={'Zona Tsp': str}) df_on_2023 = pd.read_excel(os.path.join(input_path_2023, arquivo_on_2023), sheet_name='Bulk Plan', usecols=['Centro', 'Fábrica', 'Cod Cliente', 'Nome do Local de Destino', 'Cidade de Destino', 'Zona Tsp', 'Incoterm', 'Channel Type', 'Insert Time', 'Grupo de Carga', 'DEL LINK'], dtype={'Zona Tsp': str}) df_transf_2024 = pd.read_excel(os.path.join(input_path_2024, arquivo_transf_2024), sheet_name='Bulk Plan', usecols=['Centro', 'Fábrica', 'Cod Cliente', 'Nome do Local de Destino', 'Cidade de Destino', 'Zona Tsp', 'Incoterm', 'Channel Type', 'Insert Time', 'Grupo de Carga', 'DEL LINK'], dtype={'Zona Tsp': str}) df_transf_2024['Channel Type'].replace('DISTRIBUTOR', 'CDA', inplace=True) df_off_2024 = pd.read_excel(os.path.join(input_path_2024, arquivo_off_2024), sheet_name='Bulk Plan', usecols=['Centro', 'Fábrica', 'Cod Cliente', 'Nome do Local de Destino', 'Cidade de Destino', 'Zona Tsp', 'Incoterm', 'Channel Type', 'Insert Time', 'Grupo de Carga', 'DEL LINK'], dtype={'Zona Tsp': str}) df_on_2024 = pd.read_excel(os.path.join(input_path_2024, arquivo_on_2024), sheet_name='Bulk Plan', usecols=['Centro', 'Fábrica', 'Cod Cliente', 'Nome do Local de Destino', 'Cidade de Destino', 'Zona Tsp', 'Incoterm', 'Channel Type', 'Insert Time', 'Grupo de Carga', 'DEL LINK'], dtype={'Zona Tsp': str}) df_all = pd.concat([df_transf_2023, df_off_2023, df_on_2023, df_transf_2024, df_off_2024, df_on_2024], ignore_index=True) df_all = df_all.drop_duplicates(subset='Grupo de Carga') df_all = df_all.loc[df_all['Incoterm'] == 'CIF'] df_all['Insert Time'] = df_all['Insert Time'].str[:19] df_all['Insert Time'] = pd.to_datetime(df_all['Insert Time']) df_all.sort_values(by=['Insert Time'], inplace=True) df_all['Zona Tsp'] = df_all['Zona Tsp'].apply(lambda x: str(x).zfill(8)) df_all['Trip Type'] = df_all.apply(lambda x: 'T1' if pd.isna(x['DEL LINK']) else 'T2', axis=1) for linha in df_all.index: centro = df_all.loc[linha, "Centro"] if isinstance(centro, int): pass else: centro = centro.replace('-ECP', '') centro = int(centro) df_all.loc[linha, "Centro"] = centro cod_cliente = df_all.loc[linha, "Cod Cliente"] if isinstance(cod_cliente, int): pass elif '-ECP' in cod_cliente: cod_cliente = cod_cliente.replace('-ECP', '') df_all.loc[linha, "Cod Cliente"] = cod_cliente df_all['Centro'] = df_all['Centro'].apply(lambda x: str(x).zfill(4)) df_all['Cod Cliente'] = df_all['Cod Cliente'].astype(str) df_fabricas = pd.read_excel(os.getcwd()+"\\"+'Parametros'+"\\"+'Fabricas.xlsx', usecols=['Centro','Fab Consolidado','UF','ZnOrigem_Centro'], dtype={'Centro': str, 'ZnOrigem_Centro': str}) df_fabricas.rename(columns={'ZnOrigem_Centro': 'ZnOrigem'}, inplace=True) df_all = df_all.merge(df_fabricas,left_on ='Centro', right_on = 'Centro', how = 'left') df_rotas_ativas = df_all.drop_duplicates(subset=['Fab Consolidado', 'Cod Cliente', 'Zona Tsp'], keep='first').copy() df_rotas_ativas['Chave Fab x Cliente'] = df_rotas_ativas['Centro'] + "-" + df_rotas_ativas['Cod Cliente'] remover = ['0154-CC0017','0014-CC0014','0019-CC0017','0017-CC0019','0002-CC0002','0004-CC0004','0187-CC0187','0188-CC0188','0190-CC0190'] df_rotas_ativas = df_rotas_ativas.loc[~df_rotas_ativas['Chave Fab x Cliente'].isin(remover)] df_rotas_ativas.drop(['Chave Fab x Cliente', 'Centro', 'Fábrica', 'Incoterm'], axis=1, inplace=True) df_rotas_ativas['Lane'] = df_rotas_ativas['ZnOrigem'] + '-' + df_rotas_ativas['Zona Tsp'] df_rotas_ativas['Canal TK'] = np.where(df_rotas_ativas['Channel Type'] == "CDA", "DISTRIBUTOR", df_rotas_ativas['Channel Type']) new_column_order = ['Lane', 'Fab Consolidado', 'UF', 'ZnOrigem', 'Cod Cliente', 'Nome do Local de Destino', 'Cidade de Destino', 'Zona Tsp', 'Channel Type', 'Canal TK', 'Insert Time'] df_rotas_ativas = df_rotas_ativas.reindex(columns=new_column_order) df_clientes_ativos = df_rotas_ativas.copy() df_clientes_ativos = df_clientes_ativos.drop_duplicates(subset=['Cod Cliente', 'Zona Tsp']) new_column_order_cli = ['Cod Cliente', 'Nome do Local de Destino', 'Cidade de Destino', 'Zona Tsp', 'Channel Type', 'Canal TK'] df_clientes_ativos = df_clientes_ativos.reindex(columns=new_column_order_cli) filename = "Clientes Ativos.xlsx" df_clientes_ativos.to_excel(os.getcwd()+"\\Parametros\\"+filename, index=False) df_zonas = pd.read_excel(input_path_base+'\Indicadores\Bdados\postal codes.xlsm', sheet_name='Lista_Zonas', usecols=['TSP Zone Origin', 'Origin'], dtype={'TSP Zone Origin': str}) df_cidades = pd.read_excel(input_path_base+'\Indicadores\Bdados\postal codes.xlsm', sheet_name='br_postal_codes', usecols=['Cidade', 'UF', 'Zn Transporte', 'Id Reg Int', 'Nome Reg Intermediaria'], dtype={'Zn Transporte': str, 'Id Reg Int': str}) df_rotas_ativas = df_rotas_ativas.merge(df_zonas, left_on = 'Zona Tsp', right_on = 'TSP Zone Origin', how = 'left') df_rotas_ativas['Check Cidade'] = df_rotas_ativas['Origin'].str.lower() == df_rotas_ativas['Cidade de Destino'].apply(unidecode).str.lower().str.replace(' ', '') df_check_erro_cid = df_rotas_ativas.loc[(df_rotas_ativas['Check Cidade'] == False) & ~df_rotas_ativas['Zona Tsp'].isin(['41290550', '22713003', '21010900', '40460001'])] count_erro_zn = df_check_erro_cid.shape[0] if count_erro_zn == 0: print('Não existem cidades divergentes na database') else: display(df_check_erro_cid) df_rotas_ativas = df_rotas_ativas.drop_duplicates(subset=['Lane', 'Channel Type']) df_rotas_ativas = df_rotas_ativas.merge(df_cidades, left_on='Zona Tsp', right_on='Zn Transporte', how='left') df_rotas_ativas = df_rotas_ativas.rename(columns={'Fab Consolidado': 'Fábrica', 'UF_x': 'UF Origem', 'ZnOrigem': 'Zona Origem', 'Cidade': 'Destino', 'UF_y': 'UF Destino', 'Zn Transporte': 'Zona Destino', 'Id Reg Int': 'Id Reg Macro', 'Nome Reg Intermediaria': 'Regiao Macro', 'Channel Type': 'Canal Log'}) df_rotas_ativas.drop(['TSP Zone Origin', 'Origin', 'Check Cidade', 'Insert Time'], axis=1, inplace=True) new_column_order_2 = ['Lane', 'Fábrica', 'UF Origem', 'Zona Origem', 'Destino', 'UF Destino', 'Zona Destino', 'Id Reg Macro', 'Regiao Macro', 'Canal Log', 'Canal TK'] df_rotas_ativas = df_rotas_ativas.reindex(columns=new_column_order_2) #BUSCA BDADOS ATUAL E CONCATENA COM OS NOVOS... NO FOR CHECASE UM A UM E PERMITE NO INPUT ESCREVER NOVOS DADOS QUE SAO MANUAIS. df_rotas_ativas_old = pd.read_excel(os.getcwd()+"\\"+'Parametros'+"\\"+'Rotas Ativas.xlsx', dtype={'Zona Origem': str, 'Zona Destino': str, 'Id Reg Macro': str}) df_rotas_ativas_new = pd.concat([df_rotas_ativas_old, df_rotas_ativas]) df_rotas_ativas_new = df_rotas_ativas_new.drop_duplicates(subset=['Lane', 'Canal Log']) novas_rotas = df_rotas_ativas_new.loc[df_rotas_ativas_new['Rotas DED'].isnull()] display(novas_rotas) for rota in novas_rotas.index: origem = novas_rotas.loc[rota,'Fábrica'] destino = novas_rotas.loc[rota,'Destino'] uf_dest = novas_rotas.loc[rota,'UF Destino'] km = int(input(f'Digite aqui o KM da Rota {origem} x {destino}-{uf_dest}.')) ded = input(f'Confirme com "Sim" ou "Não" se esta rota deveria ter como padrão uma tarifa de frota dedicada.') df_rotas_ativas_new.loc[rota, 'km'] = km df_rotas_ativas_new.loc[rota, 'Rotas DED'] = ded #TERMINAR AQUI O CÓDIGO PARA POPULAR DUAS NOVAS COLUMAS... UMA É A QTDE DE CLIENTS NA ROTA E A OUTRA É A QTDE DE PEDIDOS.. df_rotas_ativas_new = df_rotas_ativas_new.drop(['Qt_Clientes_Rota', 'Qt_Orders_T1', 'Qt_Orders_T2', 'Qt_Orders_Rota'], axis=1) df_client_pivot = df_all.pivot_table(index=['ZnOrigem', 'Zona Tsp', 'Channel Type'], values="Cod Cliente", aggfunc='nunique', fill_value=0) df_client_pivot = df_client_pivot.reset_index() df_count_pivot = df_all.pivot_table(index=['ZnOrigem', 'Zona Tsp', 'Channel Type'],columns='Trip Type',values="Grupo de Carga",aggfunc='count',fill_value=0) df_count_pivot = df_count_pivot.reset_index() df_rotas_ativas_valores = df_rotas_ativas_new.merge(df_client_pivot[['ZnOrigem', 'Zona Tsp', 'Channel Type', 'Cod Cliente']], how='left', left_on=['Zona Origem', 'Zona Destino', 'Canal Log'], right_on=['ZnOrigem', 'Zona Tsp', 'Channel Type']) df_rotas_ativas_valores = df_rotas_ativas_valores.merge(df_count_pivot[['ZnOrigem', 'Zona Tsp', 'Channel Type', 'T1', 'T2']], how='left', left_on=['Zona Origem', 'Zona Destino', 'Canal Log'], right_on=['ZnOrigem', 'Zona Tsp', 'Channel Type']) df_rotas_ativas_valores = df_rotas_ativas_valores.drop(['ZnOrigem_x', 'Zona Tsp_x', 'Channel Type_x', 'ZnOrigem_y', 'Zona Tsp_y', 'Channel Type_y'], axis=1) df_rotas_ativas_valores.rename(columns={'Cod Cliente': 'Qt_Clientes_Rota', 'T1': 'Qt_Orders_T1', 'T2': 'Qt_Orders_T2'}, inplace=True) df_rotas_ativas_valores['Qt_Orders_Rota'] = df_rotas_ativas_valores['Qt_Orders_T1'] + df_rotas_ativas_valores['Qt_Orders_T2'] filename = "Rotas Ativas.xlsx" df_rotas_ativas_valores.to_excel(os.getcwd()+"\\Parametros\\"+filename, index=False) endtime = datetime.now() totaltime = endtime - starttime print(f'O código demorou {totaltime}')
×
×
  • Create New...