Настройка
Это выглядит , как будто вы показываете здесь структурированные массивы, поэтому я предполагаю, что вы их используете.Если вы не используете структурированные массивы, вы должны, в этом случае вы можете создать их следующим образом:
a1 = np.array(a1, dtype=[('timestamp', int), ('value', int)])
a2 = np.array(a2, dtype=[('timestamp', int), ('color', '<U5')])
Теперь вы можете использовать numpy.lib.recfunctions
здесь:
import numpy.lib.recfunctions as recfunctions
out = recfunctions.join_by('timestamp', a1, a2, jointype='outer')
masked_array(data=[(1531000000, 0, --), (1531500000, --, 'blue'),
(1532000000, 1, 'black'), (1533000000, 2, --),
(1533500000, --, 'green'), (1534000000, 3, 'red')],
mask=[(False, False, True), (False, True, False),
(False, False, False), (False, False, True),
(False, True, False), (False, False, False)],
fill_value=(999999, 999999, 'N/A'),
dtype=[('timestamp', '<i4'), ('value', '<i4'), ('color', '<U5')])
Вывод выглядит немного запутанным, но это просто, как выглядит представление np.ma.masked_array
.Легко видеть, что это правильный вывод:
out.tolist()
[(1531000000, 0, None),
(1531500000, None, 'blue'),
(1532000000, 1, 'black'),
(1533000000, 2, None),
(1533500000, None, 'green'),
(1534000000, 3, 'red')]
Однако, с замаскированным массивом, у вас есть доступ ко всему множеству служебных функций, чтобы правильно заполнитьпропущенные значения.