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!