【发布时间】:2014-05-05 17:53:41
【问题描述】:
假设我有两个这样的 DataFrame:
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
但我正在尝试使用 join 方法,我一直认为它非常相似。
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:
我错过了什么?
【问题讨论】:
-
这里的具体问题是
merge将left的列连接到right的列,这是你想要的,但是join(... on=[...])将left的列连接到索引键right,这不是你想要的。有关详细信息,请参阅下面的答案。 -
DataFrame.join() 总是希望将调用者的索引或键(由
on选项指定)与other的索引相匹配。请记住,连接索引。而 merge() 是一种更通用的方法。 -
这看起来像是 dfsql 的一个很好的例子 df = dfsql.query('select * from a left join b on a.id = b.id', a=a_df , b=b_df) github.com/mindsdb/dfsql 关于它的完整文章在这里:medium.com/riselab/…
标签: python pandas dataframe join