2011-10-15 12 views
11

¿Existe una implementación en la que pueda unir dos matrices en función de sus claves? Hablando de eso, ¿es la forma canónica de almacenar claves en una de las columnas NumPy (NumPy no tiene un atributo 'id' o 'rownames')?SQL join o la función merge() de R en NumPy?

Respuesta

12

Si desea utilizar sólo numpy, puede utilizar matrices estructuradas y la función lib.recfunctions.join_by (ver http://pyopengl.sourceforge.net/pydoc/numpy.lib.recfunctions.html). Un pequeño ejemplo:

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')]) 

Otra opción es utilizar pandas (documentation). No tengo experiencia con él, pero proporciona estructuras de datos y funcionalidades más potentes que el estándar numpy, "para hacer que trabajar con datos" relacionales "o" etiquetados "sea fácil e intuitivo". Y ciertamente tiene funciones de unión y fusión (por ejemplo, ver http://pandas.sourceforge.net/merging.html#joining-on-a-key).

+0

Ah, se olvidó de las 'recfunctions'. Actualmente estoy evaluando pandas ... tantas opciones ... Gracias. – hatmatrix