You can loop over every vertex after initializing different arrays for each of your vertex color layers. You can parse the init data from a file (eg .csv) with python but this is not covered in this answer.

    import bpy
    import bmesh
    
    obj = bpy.context.selected_objects[0]  # Get the currently selected object
    
    vertex_colors = obj.data.vertex_colors
    while vertex_colors:
        vertex_colors.remove(vertex_colors[0])  # Remove all vertex color layers form the mesh data
    
    bm = bmesh.new()  # Create new bmesh object
    bm.from_mesh(obj.data)  # Init the bmesh with the current mesh
    
    verts_count = len(bm.verts)  # Get the number of vertices in the mesh 
    # Not obligatory, I just use this to populate the vertex color layers)
    
    # This dictionary will map each vertex color layer name to the data for each vertex
    data_layers = {
        'Temperature':  # vertex color layer name 1
            [
            (1, 0, 0, 1),  # Color of vertex index 0
            (0, 1, 0, 1),  # Color of vertex index 1
            (0, 0, 1, 1),  # Color of vertex index 2
            (1, 1, 1, 1),  # Color of vertex index 3...
            ],    
        'Velocity':  # vertex color layer name 2
            [(i / verts_count, i / verts_count, i / verts_count, 1) for i in range(verts_count)],
        'Salinity':  # vertex color layer name 3
            [(i / verts_count, 1 - (i / verts_count), 0.5, 1) for i in range(verts_count)],        
        }

    color_layers = {}
    for layer_name in data_layers:
        # Create the vertex color layers and store them in a dictionary for easy access by name
        color_layers[layer_name] = bm.loops.layers.color.new(layer_name)
    
    for layer_name, layer in color_layers.items():
        # Loop over each vertex color layer
        for v in bm.verts:
            # Loop over every vertex
            for loop in v.link_loops:
                # Loop over every loop of this vertex (the corners of the faces in which this vertex exists)  
                try:
                    loop[layer] = data_layers[layer_name][v.index]
                    # Get the value from the init dictionary
                except IndexError:
                    loop[layer] = (1, 0, 1, 1)
                    # Set a placeholder (magenta) value if the mapping array is not long enough
    
    bm.to_mesh(obj.data)  # Give the data back to the actual mesh

Then to acces the vertex colors in your material, use the vertex color node :

[![enter image description here][1]][1]

Note that the "Temperature" layer was initialized with only 4 values, so only a few vertices in the right eye got colored and the rest of the vertices got mapped to a magenta color.

Also note that you can store 4 values in each of the 4 channels of your color. Example with the 'Velocity' vertex color layer used before :

[![enter image description here][2]][2]


  [1]: https://i.sstatic.net/MrE1Z.gif
  [2]: https://i.sstatic.net/3LL7f.png