Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Como comparar linhas que contenham itens iguais em uma das colunas

Estou trabalhando em um projeto aqui no trabalho para impressionar meu chefe, que consiste em analisar itens com diferença de preço em um intervalo de jan e dez de um determinado ano. Inicialmente tentei trabalhar com um mesmo dataframe em que cada item se repete 2 vezes( em janeiro e dezembro) mas não consegui nem encontrar as linhas em que eles se repetem. Dividi o dataframe em dois, um com os itens em janeiro e o outro com os itens em dezembro e tentei atraves de um laço for comparar as linhas, o mais perto que cheguei foi em um erro que dizia "Não da para comparar strings com strings" Alguem pode me ajudar por favor?

1 resposta
solução!

Boas Matheus! Tudo bem? Espero que sim.

Desculpe pela demora.

Com poucas informações sobre o DataFrame fica um pouco difícil compreender corretamente qual a situação. Vou mostar como fazer o cruzamento, com um ou dois DataFrames.

Considerando que você tenha um DataFrame no qual os dados se repetem e um identificador de produto, ou seja, um dataFrame da seguinte forma:

#Criando o DataFrame

import pandas as pd
produtos_id = [13, 21, 17, 36, 13, 21, 17, 36,]
produtos_nome = ['cadeira', 'mesa', 'tinta', 'armário','cadeira', 'mesa', 'tinta', 'armário']
mes_de_referencia = ['janeiro', 'janeiro', 'janeiro', 'janeiro', 'dezembro', 'dezembro','dezembro','dezembro']
valor = [100, 300, 50, 400, 120, 210, 60, 320]

dados['produto_id'] = produtos_id
dados['produto_nome'] = produtos_nome
dados['mes'] = mes_de_referencia
dados['valor'] = valor
dados

Que retorna o dataframe:

produto_idproduto_nomemesvalor
013cadeirajaneiro100
121mesajaneiro300
217tintajaneiro50
336armáriojaneiro400
413cadeiradezembro120
521mesadezembro210
617tintadezembro60
736armáriodezembro320

Vou criar dois DataFrames a partir desse isolando os produtos de janeiro e de dezembro:

produtos_janeiro = dados.query("mes == 'janeiro'")
produtos_janeiro.set_index('produto_id', drop=True, inplace=True)

Para criar o DataFrame de janeiro e:

produtos_dezembro = dados.query("mes == 'dezembro'")
produtos_dezembro = produtos_dezembro[['produto_id', 'valor']]
produtos_dezembro.set_index('produto_id', drop = True, inplace=True)
produtos_dezembro.columns = ['valor_dezembro']
produtos_dezembro

Para criar o de dezembro. Aqui, eu selecionei para dezembro apenas os dados que me interessam, que é o identificador do produto e o valor. Além disso, para ambos os casos, setei o identificador do produto como index, o que facilitará as coisas mais tarde.

Agora, vamos juntas os dois DataFrames através da função pd.join:

dados_comparacao = produtos_janeiro.join(produtos_dezembro)

Que retorna:

produto_idproduto_nomemesvalorvalor_dezembro
13cadeirajaneiro100120
21mesajaneiro300210
17tintajaneiro5060
36armáriojaneiro400320

Vamos melhorar um pouco esse DataFrame:

dados_comparacao.drop('mes', axis=1, inplace=True)
dados_comparacao.columns = ['nome', 'valor_janeiro', 'valor_dezembro']

Tirando o mes, e renomeando as colunas, agora as informações estão mais claras. Além disso, vamos adicionar uma outra coluna com a diferença entre os valores de dezembro e janeiro:

dados_comparacao['diff'] = dados_comparacao.valor_dezembro - dados_comparacao.valor_janeiro

Agora, temos uma tabela na qual podemos facilmente comparar os valores:

produto_idproduto_nomemesvalorvalor_dezembro
13cadeirajaneiro100120
21mesajaneiro300210
17tintajaneiro5060
36armáriojaneiro400320

Espero ter ajudado! Bons Estudos!