Suponha os seguintes quatro dataframes abaixo (e também neste link do GoogleColab):
Janeiro = {'DS_NOME_SERVIDOR': 'Rubens Braga', 'NR_MATRICULA':23420, 'CD_RUB':31420, 'VALOR': 21916.94}
Fevereiro = {'DS_NOME_SERVIDOR': 'Rubens Braga', 'NR_MATRICULA':23420, 'CD_RUB':31420, 'VALOR': 21886.00}
Marco = {'DS_NOME_SERVIDOR': 'Rubens Braga', 'NR_MATRICULA':23420, 'CD_RUB':31440, 'VALOR': 21916.94}
Abril = {'DS_NOME_SERVIDOR': 'Rubens Braga', 'NR_MATRICULA':23420, 'CD_RUB':31440, 'VALOR': 21886.00}
Considere que:
- 'DS_NOME_SERVIDOR': Nome do empregado
- 'NR_MATRICULA': Matricula do empregado
- 'CD_RUB': Código que identifica o valor pago e descontado (31420 é quando é pago e 31440 é quando é descontado)
Eu quero fazer uma busca que me retornem valores pagos e descontados dentro de uma janela de 3 meses, como a seguir:
Janela "Janeiro, Fevereio e Março". No mes de Janeiro consta que ele recebeu 21916.94 e que no mes de Fevereiro ele recebeu 21886.00 (ambos CD_RUB == 31420). Já em Março ele devolveu 21916.94 (CD_RUB == 31440). Ou seja, ele possui um débito de 21886.00 (Já que esse valor não foi devolvido).
Janela "Fevereiro, Março e Abril" Nesse período, ele recebeu 21886.00 em Fevereiro; em Março ele devolveu 21916.94 e em Abril devolveu 21886.00. Logo, há um valor devolvido a mais nessa Janela, que é o de 21916.94 que eu quero que me retorne.
O que eu tentei fazer
#variável que armazena os dataframes das janelas mes_adiantamento = Janeiro mes_intervalor = Fevereiro mes_devolucao = Marco
#Aqui eu pego os meses da janela considerada e filtro pelas rubricas de adiantamento e de devolução
adiantamento = mes_adiantamento.query("CD_RUB == 31420")
devolucao_mes_intervalo = mes_intervalo.query("CD_RUB == 3144")
devolucao_mes_devolucao = mes_devolucao.query("CD_RUB == 3144")
#concateno em um novo dataframe apenas o que é devolvido
mes_intervalo_devolucao = pd.concat([devolucao_mes_intervalo, devolucao_mes_devolucao], axis=0, join='outer')
#faço um merge entre o que foi adiantado, dataframe "adiantamento" Janeiro, e o que foi devolvido, dataframe "mes_intervalo_devolucao". Nesse exemplo, adiantamento é Janeiro, e mes_intervalo_devolucao armazena a concatenação de Fevereiro e Março.
ferias_nao_devolvidas = pd.merge(adiantamento, mes_intervalo_devolucao, on=['NR_MATRICULA'], how='left')
A partir daqui eu já não sei como prosseguir. Nem mesmo sei se estou indo no caminho certo, já que não retorna o resultado pretendido. Segue o ambiente de testes no colab: https://colab.research.google.com/drive/1HO8xeRxQG93vnpj3fGIAZ3_W4qCCjMhM?authuser=1#scrollTo=JFSy4I6ri-kP