Giả sử tôi có hai DataFram như vậy:
left = pd.DataFrame({'key1': ['foo', 'bar'], 'lval': [1, 2]})
right = pd.DataFrame({'key2': ['foo', 'bar'], 'rval': [4, 5]})
Tôi muốn hợp nhất chúng, vì vậy tôi thử một cái gì đó như thế này:
pd.merge(left, right, left_on='key1', right_on='key2')
Và tôi hạnh phúc
key1 lval key2 rval
0 foo 1 foo 4
1 bar 2 bar 5
Nhưng tôi đang cố gắng sử dụng phương thức tham gia mà tôi đã tin là khá giống nhau.
left.join(right, on=['key1', 'key2'])
Và tôi nhận được điều này:
//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:
Tôi đang thiếu gì?
on
tùy chọn) so với các other
chỉ mục của. Hãy nhớ rằng, các chỉ mục để tham gia. Trong khi merge () là một phương thức chung hơn.
merge
tham gia các cột củaleft
các cộtright
, đó là những gì bạn muốn, nhưngjoin(... on=[...])
tham gia các cột củaleft
các khóa chỉ mục củaright
, đó không phải là những gì bạn muốn. Xem câu trả lời của tôi dưới đây để biết thêm chi tiết.