raze Postado Maio 31, 2022 Compartilhar Postado Maio 31, 2022 Caros, estou tentando fazer um arredondamento de um sum em um data frame criado por um group mas não consegui de nenhuma forma. Vejam: #1 Gera a CE fazendo consulta na SD e traz somente os lançamentos de acordo ao filtro de CUSTOS ELEGÍVEIS CE = SD.query(f'ANO_MES == "{MES}" & RUBRICA != "{TXA}" & CLIENTE == ["{MAO}","{SPO}"] & CONTA != ["{AMOSTRA}"]') #2 Faz consulta na CE e traz somente os campos necessários no TXT CE = CE.groupby(['DEBITO', 'CREDITO'])['VALOR'].sum().apply(lambda x: round(x)).reset_index() DEBITO CREDITO VALOR 0 215010001.0 311010001.0 31967953 1 215010002.0 311010003.0 83254 Também tentei colocando um 2 no round(x,2) porém o retorno foi o seguinte: #1 Gera a CE fazendo consulta na SD e traz somente os lançamentos de acordo ao filtro de CUSTOS ELEGÍVEIS CE = SD.query(f'ANO_MES == "{MES}" & RUBRICA != "{TXA}" & CLIENTE == ["{MAO}","{SPO}"] & CONTA != ["{AMOSTRA}"]') #2 Faz consulta na CE e traz somente os campos necessários no TXT CE = CE.groupby(['DEBITO', 'CREDITO'])['VALOR'].sum().apply(lambda x: round(x,2)).reset_index() DEBITO CREDITO VALOR 0 215010001.0 311010001.0 3.1967953079999998e+07 1 215010002.0 311010003.0 8.3253529999999999e+04 Agradeço muito se puderem ajudar. Link to comment Compartilhe em outros sites Outras opções de compartilhamento...
Pessoal da TecnoSpeed Thanael Postado Maio 31, 2022 Pessoal da TecnoSpeed Compartilhar Postado Maio 31, 2022 Olá @raze, tudo bem? Acredito que no seu caso, não esteja arredondando por conta do apply estar sendo aplicado ao groupby. O apply pode ser usado no DataFrame inteiro ou em apenas uma coluna, eu geralmente utilizo ele na coluna por ser mais fácil. Para utilizar ele no DataFrame o código fica um pouco diferente, pois é como se você "aplicasse uma função para todas as colunas do DataFrame". Caso você queira utilizar o apply para o dataframe inteiro, sugiro ver a Documentação. Já tentou arredondar depois de criar esse DataFrame CE? Segue abaixo o código. CE['valor'] = CE['valor'].apply(lamda x : round(x,2)) Acredito que ao fazer isso irá funcionar. Tenta ai, ai me diz se deu certo ou não 😄, caso ainda assim não funcionar, posso procurar outras soluções para resolver esse caso. Estou a disposição para eventuais dúvidas. Link to comment Compartilhe em outros sites Outras opções de compartilhamento...
raze Postado Maio 31, 2022 Autor(a) Compartilhar Postado Maio 31, 2022 @Thanael obrigado pela resposta. Eu havia tentando criar abaixo do código também porém retornou o mesmo resultado: Também tentei fazer isso na SD, que é a origem para CE, mas também sem sucesso. Link to comment Compartilhe em outros sites Outras opções de compartilhamento...
Pessoal da TecnoSpeed Thanael Postado Maio 31, 2022 Pessoal da TecnoSpeed Compartilhar Postado Maio 31, 2022 Eita 🤔, já verificou o tipo do dado ? Tenta converter o dado para float no apply CE['valor'] = CE['valor'].apply(lamda x : round(float(x),2)) na teoria era para isso funcionar... Link to comment Compartilhe em outros sites Outras opções de compartilhamento...
raze Postado Maio 31, 2022 Autor(a) Compartilhar Postado Maio 31, 2022 @Thanael retornou o mesmo resultado. Estou colocando aqui embaixo a info do dataframe Link to comment Compartilhe em outros sites Outras opções de compartilhamento...
Pessoal da TecnoSpeed Thanael Postado Maio 31, 2022 Pessoal da TecnoSpeed Compartilhar Postado Maio 31, 2022 Que estranho 🤔, não vejo motivo para não funcionar o apply. Vamos tentar utilizar outra abordagem então. Estava olhando aqui e vi que existe a função .round do próprio pandas 😂, tenta executar: CE['VALOR'] = CE['VALOR'].round(2) Segue o link da Documentação. Acredito que ao fazer isso já vai funcionar kkk Caso mesmo assim não funcione, vamos procurar outra alternativa. Link to comment Compartilhe em outros sites Outras opções de compartilhamento...
raze Postado Maio 31, 2022 Autor(a) Compartilhar Postado Maio 31, 2022 Eu também havia tentado usar o round. Sou iniciante no Python porém acredito que o problema esteja sendo a base de origem. O SD vem de um select no SQL Server onde o campo valor tem muitos caracteres após a vírgula. Minha impressão é que não estou conseguindo mudar o formato de notação científica para round 2. Link to comment Compartilhe em outros sites Outras opções de compartilhamento...
raze Postado Maio 31, 2022 Autor(a) Compartilhar Postado Maio 31, 2022 4 horas atrás, Thanael disse: Que estranho 🤔, não vejo motivo para não funcionar o apply. Vamos tentar utilizar outra abordagem então. Estava olhando aqui e vi que existe a função .round do próprio pandas 😂, tenta executar: CE['VALOR'] = CE['VALOR'].round(2) Segue o link da Documentação. Acredito que ao fazer isso já vai funcionar kkk Caso mesmo assim não funcione, vamos procurar outra alternativa. Por algum motivo ele está entendendo que após o primeiro dígito, tudo é casa decimal Link to comment Compartilhe em outros sites Outras opções de compartilhamento...
raze Postado Maio 31, 2022 Autor(a) Compartilhar Postado Maio 31, 2022 Agora mesmo, raze disse: Por algum motivo ele está entendendo que após o primeiro dígito, tudo é casa decimal Link to comment Compartilhe em outros sites Outras opções de compartilhamento...
raze Postado Maio 31, 2022 Autor(a) Compartilhar Postado Maio 31, 2022 Consegui fazer. Na verdade ao invés de display.precision eu deveria ter usado float_format. Muito obrigado pela ajuda. Link to comment Compartilhe em outros sites Outras opções de compartilhamento...
Pessoal da TecnoSpeed Thanael Postado Junho 1, 2022 Pessoal da TecnoSpeed Compartilhar Postado Junho 1, 2022 Que ótimo que funcionou! 👍 Link to comment Compartilhe em outros sites Outras opções de compartilhamento...
Postagens Recomendadas
Crie uma conta ou entre para comentar 😀
Você precisa ser um membro para deixar um comentário.
Crie a sua conta
Participe da nossa comunidade, crie sua conta.
Criar minha conta agoraÉ bem rápido!
Entrar
Você já tem uma conta?
Entrar agoraFaça o login agora.