df_merge Function

public function df_merge(df1, df2, on_column, how) result(merged_df)

Merge two dataframes on column names (similar to SQL join but using names)

@param[in] df1 Left dataframe @param[in] df2 Right dataframe @param[in] on_column Name of column to join on @param[in] how Type of join: “inner”, “left”, “right”, “outer” @return Merged dataframe

Arguments

Type IntentOptional Attributes Name
type(data_frame), intent(in) :: df1
type(data_frame), intent(in) :: df2
character(len=*), intent(in) :: on_column
character(len=*), intent(in) :: how

Return Value type(data_frame)


Source Code

    function df_merge(df1, df2, on_column, how) result(merged_df)
        type(data_frame), intent(in) :: df1, df2
        character(len=*), intent(in) :: on_column, how
        type(data_frame) :: merged_df

        integer :: col_idx1, col_idx2

        ! Find column indices
        col_idx1 = df1 % find_header_index(on_column)
        col_idx2 = df2 % find_header_index(on_column)

        if (col_idx1 == -1 .or. col_idx2 == -1) then
            print *, "Error: Column '", trim(on_column), "' not found in one or both dataframes"
            call merged_df % new()
            return
        end if

        ! Perform appropriate join based on 'how'
        select case (trim(how))
        case ("inner")
            merged_df = df_inner_join(df1, df2, col_idx1, col_idx2)
        case ("left")
            merged_df = df_left_join(df1, df2, col_idx1, col_idx2)
        case ("right")
            merged_df = df_right_join(df1, df2, col_idx1, col_idx2)
        case ("outer")
            merged_df = df_outer_join(df1, df2, col_idx1, col_idx2)
        case default
            print *, "Error: 'how' must be 'inner', 'left', 'right', or 'outer'"
            call merged_df % new()
        end select
    end function df_merge