Untitled

mail@pastecode.io avatarunknown
python
2 months ago
1.7 kB
3
Indexable
Never
# Diccionario con las listas de columnas de cada dataset a mergear
COLUMNS_TO_AGG = {
    'cesiones': lista_cols_cesiones, 
    'grafo': lista_cols_grafo, 
    'preCompras': lista_cols_preCompras, 
    'preVentas': lista_cols_preVentas,
    'compras': lista_cols_compras, 
    'ventas': lista_cols_ventas, 
    'mp': lista_cols_mp, 
    'payerConcent': lista_cols_payerConcent, 
    'supplierConcent': lista_cols_supplierConcent, 
    'super': lista_cols_super
}


def merge_dataframes(df1, df2, merge_with, merge_on='identifier'):
    '''Merge 2 pandas dataframes, with the caveat that the second one could be empty.
      Args:
          - df1, df2 (pd.DataFrame): dataframes to merge.
          - merge_on (str): merge column.
      Returns:
          - merged_df (pd.DataFrame).
      '''
    if df2 is None:
        # Si te viene None, agrega las columnas del df2 al df1 con valores nulos.
        for column in COLUMNS_TO_AGG[merge_with]:
            if column != merge_on:  # sin la columna 'identifier'
                df1[column] = None
    else: # Si df2 no está vacío, realiza el LEFT JOIN normalmente.
        df1 = pd.merge(df1, df2, on=merge_on, how='left')

    return df1


# diccionario con el dataframe y su nombre (para buscar sus cols en el otro diccionario)
dfs_to_merge = {
    'cesiones': df_cesiones, 
    'grafo': df_grafo, 
    'preCompras': df_mi_perCompras, 
    'preVentas': df_mi_perVentas,
    'compras': df_compras, 
    'ventas': df_ventas, 
    'mp': df_mp, 
    'payerConcent': df_payerConcent, 
    'supplierConcent': df_supplierConcent, 
    'super': df_super
}


for dataset_name, df_to_merge in dfs_to_merge.items():
    dataset = merge_dataframes(df1=dataset, df2=df_to_merge, merge_with=dataset_name)