Supposons que j'ai deux DataFrames comme ceci:
left = pd.DataFrame({'key1': ['foo', 'bar'], 'lval': [1, 2]})
right = pd.DataFrame({'key2': ['foo', 'bar'], 'rval': [4, 5]})
Je veux les fusionner, alors j'essaye quelque chose comme ceci:
pd.merge(left, right, left_on='key1', right_on='key2')
Et je suis content
key1 lval key2 rval
0 foo 1 foo 4
1 bar 2 bar 5
Mais j'essaie d'utiliser la méthode de jointure, qui m'a amené à croire qu'elle est assez similaire.
left.join(right, on=['key1', 'key2'])
Et je reçois ceci:
//anaconda/lib/python2.7/site-packages/pandas/tools/merge.pyc in _validate_specification(self)
406 if self.right_index:
407 if not ((len(self.left_on) == self.right.index.nlevels)):
--> 408 raise AssertionError()
409 self.right_on = [None] * n
410 elif self.right_on is not None:
AssertionError:
Qu'est-ce que je rate?
on
option) avec les other
index de. N'oubliez pas, les index de jointure. Alors que merge () est une méthode plus générique.
merge
joint les colonnes deleft
aux colonnes deright
, ce qui est ce que vous voulez, maisjoin(... on=[...])
joint les colonnes deleft
pour indexer les clés deright
, ce qui n'est pas ce que vous voulez. Voir ma réponse ci-dessous pour plus de détails.