a2 = np.array([('3:6506', 4.67259718014735e-25, 0.999999999950887), (
    '3:6601', 2.24527453887999e-27, 0.999999999952706), ('3:21801', 
    1.98496509218366e-31, 0.99999999997999)], dtype=[('pos', '|S100'), (
    'col1', '<f8'), ('col2', '<f8')])
a3 = np.array([('2:6506', 4.67259718014735e-25, 0.999999999950887), (
    '2:6601', 2.24527453887999e-27, 0.999999999952706), ('2:21801', 
    1.98496509218366e-31, 0.99999999997999)], dtype=[('pos', '|S100'), (
    'col3', '<f8'), ('col4', '<f8')])
dfs = [pd.DataFrame.from_records(a) for a in (a1, a2, a3)]
result = dfs[0]
for df in dfs[1:]:
    cols = list(set(result.columns).intersection(df.columns))
result = pd.merge(result, df, how='outer', left_on=cols, right_on=cols)
print(result)
numpy - how to outer join arrays