Here's an attempt with plain numpy. It creates a matrix with 3 columns and as many rows as a1 + a2. It writes a1 and a2 in the columns, and sort the rows by their first value.
Note that it only works if x values are disjoint:
import numpy as np
x = np.arange(6)
# array([0, 1, 2, 3, 4, 5])
a1 = np.vstack((x,x)).T
# array([[0, 0],
# [1, 1],
# [2, 2],
# [3, 3],
# [4, 4],
# [5, 5]])
a2 = a1 + 0.5
# array([[ 0.5, 0.5],
# [ 1.5, 1.5],
# [ 2.5, 2.5],
# [ 3.5, 3.5],
# [ 4.5, 4.5],
# [ 5.5, 5.5]])
m = np.empty((12, 3))
m[:] = np.nan
# array([[ nan, nan, nan],
# [ nan, nan, nan],
# [ nan, nan, nan],
# [ nan, nan, nan],
# [ nan, nan, nan],
# [ nan, nan, nan],
# [ nan, nan, nan],
# [ nan, nan, nan],
# [ nan, nan, nan],
# [ nan, nan, nan],
# [ nan, nan, nan],
# [ nan, nan, nan]])
m[:6, :2] = a1
# array([[ 0., 0., nan],
# [ 1., 1., nan],
# [ 2., 2., nan],
# [ 3., 3., nan],
# [ 4., 4., nan],
# [ 5., 5., nan],
# [ nan, nan, nan],
# [ nan, nan, nan],
# [ nan, nan, nan],
# [ nan, nan, nan],
# [ nan, nan, nan],
# [ nan, nan, nan]])
m[6:, ::2] = a2
# array([[ 0. , 0. , nan],
# [ 1. , 1. , nan],
# [ 2. , 2. , nan],
# [ 3. , 3. , nan],
# [ 4. , 4. , nan],
# [ 5. , 5. , nan],
# [ 0.5, nan, 0.5],
# [ 1.5, nan, 1.5],
# [ 2.5, nan, 2.5],
# [ 3.5, nan, 3.5],
# [ 4.5, nan, 4.5],
# [ 5.5, nan, 5.5]])
m[m[:,0].argsort()]
# array([[ 0. , 0. , nan],
# [ 0.5, nan, 0.5],
# [ 1. , 1. , nan],
# [ 1.5, nan, 1.5],
# [ 2. , 2. , nan],
# [ 2.5, nan, 2.5],
# [ 3. , 3. , nan],
# [ 3.5, nan, 3.5],
# [ 4. , 4. , nan],
# [ 4.5, nan, 4.5],
# [ 5. , 5. , nan],
# [ 5.5, nan, 5.5]])
Using pandas is the correct method here.