Agrupar dados em um loop de várias planilhas

Python Avançado

Olá, eu tenho um código que itera sobra várias planilhas que se diferenciam pela coluna 'bit' (que representa as bitolas das varas). Este código aloja os cortes (cada qual com seus respectivos tamanhos) que podem ser feitos em cada vara. Cada linha representa uma vara com os cortes alojados nela. Acontece que durante o alojamento, alguns cortes vieram repetidos, mas poderiam estar agrupados. Por exemplo: vara 1 [{'pos' 1, 'bit' 5.0, 'qtd' 2, 'cm' 150}, {'pos' 1, 'bit' 5.0, 'qtd' 2, 'cm' 150}, {'pos' 2, 'bit' 5.0, 'qtd' 1, 'cm' 230}]. Veja que há dois cortes com o mesmo tamaho de 150. A representação deveria vir assim: vara 1 [{'pos' 1, 'bit' 5.0, 'qtd' 4, 'cm' 150}, {'pos' 2, 'bit' 5.0, 'qtd' 1, 'cm' 230}]. O código que AGRUPA e itera sobre as tabelas do dataframe 'df_varas' (que contém as tabelas, cada quala com uma bitola, e já com os cortes alojados, mas NÃOagrupados) é: 

def agrupar_cortes_linha(row):
    cortes_agrupados = {}
    for corte in row['Cortes']:
        pos = corte['Pos']
        bit = corte['Bit']
        cm = corte['Cm']
        qtd = corte['Qtd']
        key = f'{pos}_{bit}_{cm}'  # Usamos uma chave única com base em 'Pos', 'Bit' e 'Cm'
        if key not in cortes_agrupados:
            cortes_agrupados[key] = {'Pos': pos, 'Bit': bit, 'Cm': cm, 'Qtd': qtd}
        else:
            cortes_agrupados[key]['Qtd'] += qtd
    return list(cortes_agrupados.values())

# Aplicar a função 'agrupar_cortes_linha' para cada linha do DataFrame 'df_barras'
df_varas['CortesAgrupados'] = df_varas.apply(agrupar_cortes_linha, axis=1)


# Imprimir o DataFrame 'df_varas' com a coluna 'CortesAgrupados'
display(df_varas).

Ele agrupa direitinho, mas apenas a última tabela com a bitola 'bit': 16.0. As demais tabelas com as demais bitolas, o são sobrepostas, ou não são iteradas, ou não são apenas impressas... eu não sei o que pode estar havendo.

 

Desde já agradeço.

Foto de Jônatas S.
Jônatas perguntou há 1 ano

Sabe a resposta?

Ganhe 10 pts por resposta de qualidade
Responder dúvida
4 respostas
1
votos
1 usuário votou nessa resposta como útil.
Professor Lucas M.
Identidade verificada
  • CPF verificado
  • E-mail verificado
Respondeu há 1 ano

def agrupar_cortes_linha(row):

      cortes_agrupados = {}

       for corte in row['Cortes']:

          pos = corte['Pos'] bit = corte['Bit']

          cm = corte['Cm'] qtd = corte['Qtd']

         tabela = corte['Tabela'] key = f'{pos}_{bit}_{cm}_{tabela}' # Incluímos a coluna 'Tabela' na chave única

          if key not in cortes_agrupados:

               cortes_agrupados[key] = {'Pos': pos, 'Bit': bit, 'Cm': cm, 'Qtd': qtd, 'Tabela': tabela}

        else:

               cortes_agrupados[key]['Qtd'] += qtd return list(cortes_agrupados.values())

Envie uma dúvida gratuitamente

Envie sua primeira dúvida gratuitamente aqui no Tira-dúvidas Profes. Nossos professores particulares estão aqui para te ajudar.

0
votos
Nenhum usuário votou nessa resposta como útil.
Professor Bruno C.
Identidade verificada
  • CPF verificado
  • E-mail verificado
Respondeu há 1 ano
use R e tidyverse. muito melhor pra essas coisas
0
votos
Nenhum usuário votou nessa resposta como útil.
Professor Jhonni S.
Identidade verificada
  • CPF verificado
  • E-mail verificado
Respondeu há 3 meses
  1. Verifique os Dados de Entrada: Certifique-se de que os dados de entrada para cada bitola específica estão corretos e contêm os cortes que você espera agrupar.

  2. Imprima os Dados de Depuração: Adicione instruções de impressão dentro da função agrupar_cortes_linha para verificar se os dados estão sendo processados corretamente. Isso pode ajudar a identificar onde o código não está funcionando conforme o esperado.

  3. Verifique o DataFrame para a Bitola Específica: Certifique-se de que você está filtrando corretamente o DataFrame antes de aplicar a função.

Está precisando de Aulas Particulares?

Aqui no Profes você encontra os melhores professores particulares, presenciais ou online, para aulas de qualquer assunto!
0
votos
Nenhum usuário votou nessa resposta como útil.
Professor Amador R.
Identidade verificada
  • CPF verificado
  • E-mail verificado
Respondeu há 2 semanas

O código que você forneceu parece estar correto para agrupar os cortes dentro de cada linha do DataFrame df_varas usando a função agrupar_cortes_linha e armazenar os resultados agrupados na nova coluna CortesAgrupados. O problema que você mencionou, onde apenas a última tabela com a bitola bit: 16.0 é corretamente agrupada e as outras são sobrepostas ou não são iteradas, pode estar relacionado a como o DataFrame df_varas está estruturado ou como a operação de agrupamento está sendo aplicada.

Aqui estão algumas sugestões para diagnosticar e resolver o problema:

1. Verifique a Estrutura do DataFrame df_varas

Certifique-se de que df_varas contém todas as linhas e tabelas que você espera antes de aplicar a função de agrupamento. Você pode fazer isso imprimindo as primeiras e últimas linhas do DataFrame

2. Aplicar a Função Corretamente

Verifique se a função agrupar_cortes_linha está sendo aplicada a todas as linhas como esperado. Parece que você está aplicando a função corretamente com df_varas.apply(agrupar_cortes_linha, axis=1), o que deve aplicar a função a cada linha do DataFrame. Se cada "tabela" é uma linha em df_varas, então a função deve ser aplicada a cada tabela individualmente.

3. Verifique a Coluna Cortes

Garanta que a coluna Cortes existe em todas as linhas de df_varas e contém os dados esperados (lista de dicionários para cada corte). Se Cortes estiver faltando ou for inconsistente, isso pode causar problemas na função de agrupamento.

Professores particulares de Python

+ Ver todos
Encontre professor particular para te ajudar nos estudos
R$ 130 / h
Bruno C.
Rio de Janeiro / RJ
Bruno C.
5,0 (1 avaliação)
Tarefas resolvidas 1 tarefa resolvida
Identidade verificada
  • CPF verificado
  • E-mail verificado
1ª hora grátis
Python - Data Analysis Python - Avançado Python - Programação básica
Doutorado: Computação (UFRJ/Unirio)
Ciência de dados. Finanças, energia. Organização, visualizações e modelos de machine learning. Atividades profissionais, reforço para graduação e pós
R$ 60 / h
César D.
Mogi Guaçu / SP
César D.
4,9 (811 avaliações)
Horas de aulas particulares ministradas 87 horas de aula
Tarefas resolvidas 995 tarefas resolvidas
Identidade verificada
  • CPF verificado
  • E-mail verificado
1ª hora grátis
Programação em Python NumPy Python - Geral Programação em Python Básico
Graduação: Matemática Aplicada e Computacional (Universidade Estadual de Campinas (UNICAMP))
Faça aulas de matemática, computação e programação em c, c++, java e python.
R$ 120 / h
Johny L.
Fortaleza / CE
Johny L.
4,3 (36 avaliações)
Horas de aulas particulares ministradas 94 horas de aula
Tarefas resolvidas 29 tarefas resolvidas
Identidade verificada
  • CPF verificado
  • E-mail verificado
Programação em Python NumPy Python - OO Python - Geral
Graduação: Engenharia Civil (IFCE - Campus Fortaleza)
Professor da UFC - Aulas de estatística práticas e aplicadas ao mercado de trabalho além de acadêmico