假设我有两个这样的数据框架:
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:
我错过了什么?
我总是在索引上使用join:
import pandas as pd
left = pd.DataFrame({'key': ['foo', 'bar'], 'val': [1, 2]}).set_index('key')
right = pd.DataFrame({'key': ['foo', 'bar'], 'val': [4, 5]}).set_index('key')
left.join(right, lsuffix='_l', rsuffix='_r')
val_l val_r
key
foo 1 4
bar 2 5
同样的功能可以通过对列使用merge:
left = pd.DataFrame({'key': ['foo', 'bar'], 'val': [1, 2]})
right = pd.DataFrame({'key': ['foo', 'bar'], 'val': [4, 5]})
left.merge(right, on=('key'), suffixes=('_l', '_r'))
key val_l val_r
0 foo 1 4
1 bar 2 5
从本文档中
Pandas提供了一个单一的功能,合并,作为所有的入口点
DataFrame对象之间的标准数据库连接操作:
merge(left, right, how='inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=True
后缀=(“值”、“_y吗”),复制= True,指标= False)
和:
DataFrame。Join是一种方便的方法,用于组合两个列
潜在的不同索引的数据帧到一个单一的结果
DataFrame。这里有一个非常基本的例子:这里的数据对齐是打开的
索引(行标签)。同样的行为可以使用
Merge加上指示它使用索引的附加参数:
Result = pd。merge(left, right, left_index=True, right_index=True,
=“外”)
我总是在索引上使用join:
import pandas as pd
left = pd.DataFrame({'key': ['foo', 'bar'], 'val': [1, 2]}).set_index('key')
right = pd.DataFrame({'key': ['foo', 'bar'], 'val': [4, 5]}).set_index('key')
left.join(right, lsuffix='_l', rsuffix='_r')
val_l val_r
key
foo 1 4
bar 2 5
同样的功能可以通过对列使用merge:
left = pd.DataFrame({'key': ['foo', 'bar'], 'val': [1, 2]})
right = pd.DataFrame({'key': ['foo', 'bar'], 'val': [4, 5]})
left.merge(right, on=('key'), suffixes=('_l', '_r'))
key val_l val_r
0 foo 1 4
1 bar 2 5