Припустимо, у мене є два подібних DataFrames:
left = pd.DataFrame({'key1': ['foo', 'bar'], 'lval': [1, 2]})
right = pd.DataFrame({'key2': ['foo', 'bar'], 'rval': [4, 5]})
Я хочу їх об'єднати, тому спробую щось подібне:
pd.merge(left, right, left_on='key1', right_on='key2')
І я задоволений
key1 lval key2 rval
0 foo 1 foo 4
1 bar 2 bar 5
Але я намагаюся використовувати метод приєднання, який, як я вважаю, досить схожий.
left.join(right, on=['key1', 'key2'])
І я отримую це:
//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:
Що я пропускаю?
on
опцією) проти other
індексів 's. Пам'ятайте, індекси для приєднання. Хоча merge () є більш загальним методом.
merge
приєднується до стовпцівleft
до стовпцівright
, що є тим, що ви хочете, алеjoin(... on=[...])
приєднується до стовпцівleft
до індексованих ключівright
, що не є тим, що ви хочете. Дивіться мою відповідь нижче для отримання більш детальної інформації.