Tenho um dataframe Pandas configurado assim:
Code StartDate EndDate
A 2024-07-01 2024-08-03
B 2024-08-06 2024-08-10
C 2024-08-11 2024-08-31
Tenho uma parte do meu código que itera a cada dia (começando em 2024-07-01) e estou tentando retornar a Code
data correspondente (com um fallback se a data não estiver dentro de nenhum intervalo StartDate/EndDate).
Minha ideia original era fazer algo como:
DAYS = DAY_DF['Date'].tolist() # Just a list of each day
for DAY in DAYS:
code = False
for i,r in df.iterrows():
if r['StartDate'] <= DAY <= r['EndDate']:
code = r['Code']
break
if not code: # `Code` is still False
code = 'Fallback_Code'
Mas isso parece muito ineficiente para iterar em cada linha no dataframe, especialmente porque tenho muitos registros no meu dataframe.
Aqui estão alguns exemplos de entradas e a saída do código resultante:
2024-07-03 -> 'A'
2024-08-04 -> 'Fallback_Code'
2024-08-10 -> 'B'
2024-08-11 -> 'C'
Uma solução possível, que converte as colunas
StartDate
e para o formato (para permitir a comparação de datas). Em seguida, ele verifica se uma data específica (por exemplo, ) cai dentro de qualquer um dos intervalos de data definidos por e . Se cair, ele recupera o primeiro correspondente dessas linhas; se não, ele retorna .EndDate
datetime
2024-07-03
StartDate
EndDate
Code
Fallback code
Para obter os códigos de uma lista de datas, podemos usar o seguinte:
Saída: