1
resposta

[Dúvida] Como escrever uma condição para a coluna utilizando o pd.merge

Tenho dois Dataframe: df1[['numero_a', 'data_inicio']] e df2[['numero_b', 'data_abertura']]. Os campos 'numero_a' e 'numero_b' são inteiros e 'data_inicio', 'data_abertura' são datas.

Quero fazer o merge df3 = pd.merge(df1, df2, left_on=(['numero_a', 'data_inicio']), right_on=(['numero_b',(df2['data_abertura'] >= df1['data_inicio'])), how='left').

Meu problema está em como fazer (df2['data_abertura'] >= df1['data_inicio']) funcionar para cada linha (registro).

Agradeço a ajuda.

1 resposta

Para realizar a comparação (df2['data_abertura'] >= df1['data_inicio']) em cada linha durante o merge, você pode usar a função apply() do pandas para aplicar uma função lambda em cada registro das colunas correspondentes.

Aqui está uma possível solução para o seu problema:

import pandas as pd

df3 = pd.merge(df1, df2, left_on=['numero_a', 'data_inicio'], right_on=['numero_b', 'data_abertura'], how='left')

# Função para verificar se a data de abertura é maior ou igual à data de início
def check_data(row):
    return row['data_abertura'] >= row['data_inicio']

# Aplicando a função em cada linha do DataFrame
df3['comparacao'] = df3.apply(check_data, axis=1)

Após a execução desse código, o DataFrame df3 terá uma nova coluna chamada 'comparacao' que conterá o resultado da comparação entre as datas de abertura e início para cada registro.

Certifique-se de que as colunas 'numero_a', 'data_inicio', 'numero_b' e 'data_abertura' existam nos respectivos DataFrames (df1 e df2) e estejam com os tipos de dados corretos (inteiro para os campos numéricos e datas para os campos de data).

Espero que isso ajude! Se você tiver mais dúvidas, sinta-se à vontade para perguntar.