Есть ли реализация, в которой я могу объединить два массива на основе их ключей? Кстати, канонический способ хранения ключей в одном из столбцов NumPy (NumPy не имеет атрибута "id" или "rownames" )?
Функция SQL join или R merge() в NumPy?
Ответ 1
Если вы хотите использовать только numpy, вы можете использовать структурированные массивы и lib.recfunctions.join_by
(см. http://pyopengl.sourceforge.net/pydoc/numpy.lib.recfunctions.html). Маленький пример:
In [1]: import numpy as np
...: import numpy.lib.recfunctions as rfn
...: a = np.array([(1, 10.), (2, 20.), (3, 30.)], dtype=[('id', int), ('A', float)])
...: b = np.array([(2, 200.), (3, 300.), (4, 400.)], dtype=[('id', int), ('B', float)])
In [2]: rfn.join_by('id', a, b, jointype='inner', usemask=False)
Out[2]:
array([(2, 20.0, 200.0), (3, 30.0, 300.0)],
dtype=[('id', '<i4'), ('A', '<f8'), ('B', '<f8')])
Другой вариант - использовать pandas (документация). У меня нет опыта в этом, но он обеспечивает более мощные структуры данных и функциональность, чем стандартный numpy, "чтобы работать с" реляционными "или" помеченными "данными как легко, так и интуитивно". И это, безусловно, объединяет и объединяет функции (например, см. http://pandas.sourceforge.net/merging.html#joining-on-a-key).