2010-11-26 10 views
4

Supposons que j'ai deux tableaux (après numpy d'importation comme np),En Python, comment joindre deux tableaux par colonne clé?

a=np.array([['a',1],['b',2]],dtype=object) 

et

b=np.array([['b',3],['c',4]],dtype=object) 

Comment puis-je:

c=np.array([['a',1,None],['b',2,3],['c',None,4]],dtype=object) 

Fondamentalement, une jointure en utilisant la première colonne comme clé.

Merci

+0

Cela ressemble à un résultat vraiment spécifique. Surtout que vous ne voulez aucun dans cet ordre spécifique. – Falmarri

+0

Quelle est la taille de vos baies? Pourriez-vous utiliser [namedtuple] (http://docs.python.org/dev/library/collections.html#collections.namedtuple) + pur python (@Sven), puis chiffré après cela? – denis

Répondre

5

Une approche pure Python pour ce faire serait

da = dict(a) 
db = dict(b) 
c = np.array([(k, da.get(k), db.get(k)) 
       for k in set(da.iterkeys()).union(db.iterkeys())]) 

Mais si vous utilisez NumPy, vos tableaux sont probablement grand, et vous êtes à la recherche d'une solution avec une meilleure performance. Dans ce cas, je suggère d'utiliser une base de données réelle pour ce faire, par exemple le sqlite3 module fourni avec Python.

+0

J'ai trouvé que l'utilisation de 'sqlite3' était la meilleure. Construire des fonctionnalités basées sur ce module fait des merveilles pour moi. Merci! – UpTide

2

La meilleure solution que j'ai trouvée est l'utilisation de pandas, qui gère très bien les jointures, et les objets pandas se convertissent facilement en/depuis des matrices numpy.