1
resposta

Como percorrer um dataframe e implementar uma condicional para um determinado caso?

Olá, tenho praticado manipulação de dataframes com Pandas e me deparei com uma situação que não consigo pensar em como aplicar uma solução, eu tenho o seguinte dataframe:

dataframe da dúvida

As colunas ID1, ID2 e ID3 traz alguma informação sobre algo que aconteceu ou não, enquanto a coluna ANO_MES informa sobre quais meses aqueles dados se referem.

Como pode ser observado, de fevereiro(202202) para março (202203) o valor da coluna ID2 foi alterado, pois bem, eu gostaria de escrever um código que pudesse percorrer este dataframe e com uma codicional do tipo: if(determinado_valor_da_coluna_no_mes_x != determinado_valor_da_coluna_no_mes_x-1 ){ execute esta ação }

Eu andei pesquisando mas não consigo pensar em como faria isso, agradeço se alguém puder me ensinar uma boa maneira de aplicar o que desejo ou então me indicasse qual módulo da trilha de ciência de dados eu poderia aprender como fazer algo do tipo.

Agradeço desde já.

1 resposta

Boas Gabriel! Tudo bem? Espero que sim.

Não sei ao certo qual o domínio do seu problema, então trago uma ideia de como isso pode ser resolvido. Primeiro vou mostrar o código e depois farei a explicação.

# Percorre todas as colunas do dataset para cada uma das datas
for i, infos in dados.iterrows():
    # Definindo o estado inicial das variáveis
    if i == 0:
        id_1_atual = infos.ID1
        id_2_atual = infos.ID2
        id_3_atual = infos.ID3
    else:
        # Verifica se o estado foi mudado, e quando o estado muda, printa uma mensagem mostrando quando o estado da variável mudou.
        if infos.ID1 != id_1_atual:
            print(f'Houve mudança de estado no id 1 na data {infos.ANO_MES}')
        if infos.ID2 != id_2_atual:
            print(f'Houve mudança de estado no id 2 na data {infos.ANO_MES}')
        if infos.ID3 != id_3_atual:
            print(f'Houve mudança de estado no id 3 na data {infos.ANO_MES}')

A primeira coisa é entender como percorrer o dataframe. Existem algumas funções que fazem isso: pd.iterrows(), pd.iteritems(), e pd.itertuples().

Essas funções percorrem de formas diferentes o dataframe. Eu vou escolher trabalhar com a função pd.iterrows(), pois ela me permite controlar o índice com mais facilidade.

Para percorrer o dataframe, vamos usar um for, controlando o índice e as informações de cada uma das linhas do nosso dataframe:

for i, infos in dados.iterrows():

O índice estará salvo na variável i e os dados estarão na variável infos.

A próxima questão é sobre como verificar a mudança de estado de uma das variáveis.

Vou fazer isso criando variáveis controladoras de estado, que muitas vezes são chamadas de flags.

Então, quando passarmos pelo primeiro registro do dataset, vamos anotar o estado de cada uma das variáveis que nos interessa:

 if i == 0:
        id_1_atual = infos.ID1
        id_2_atual = infos.ID2
        id_3_atual = infos.ID3

Agora, para cada vez que passarmos novamente por um outro registro do dataframe, vamos verificar se o estado da variável mudou, criar um print de aviso e mudar o estado dessa variável:

if infos.ID1 != id_1_atual:
            print(f'Houve mudança de estado no id 1 na data {infos.ANO_MES}')
            id_1_atual = infos.ID1
        if infos.ID2 != id_2_atual:
            print(f'Houve mudança de estado no id 2 na data {infos.ANO_MES}')
            id_1_atual = infos.ID2
        if infos.ID3 != id_3_atual:
            print(f'Houve mudança de estado no id 3 na data {infos.ANO_MES}')
            id_1_atual = infos.ID3

Dessa forma, juntando todos os passos, conseguimos entender quando aconteceram as mudanças de estado no Dataset!

O resultado para o mesmo dataset que você usou, foi:

Houve mudança de estado no id 2 na data 202203
Houve mudança de estado no id 1 na data 202204

PS: Essa é apenas uma das formas de percorrer o DataFrame!

Espero te ajudado! Bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software