Merge DataFrame and Series using on
· Issue #21220 · pandas-dev/pandas (original) (raw)
Now that we support merging on
combination of column names and index levels, this should work
In [40]: a = pd.DataFrame({"A": [1, 2, 3, 4]}, index=pd.MultiIndex.from_product([['a', 'b'], [0, 1]], names=['outer', 'inner']))
In [41]: b = pd.Series([1, 2, 3, 4], index=pd.MultiIndex.from_product([['a', 'b'], [1, 2]], names=['outer', 'inner']), name='B')
In [42]: pd.merge(a, b, on=['outer', 'inner'])
ValueError Traceback (most recent call last) in () ----> 1 pd.merge(a, b, on=['outer', 'inner'])
~/Envs/dask-dev/lib/python3.6/site-packages/pandas/core/reshape/merge.py in merge(left, right, how, on, left_on, right_on, left_index, right_index, sort, suffixes, copy, indicator, validate) 58 right_index=right_index, sort=sort, suffixes=suffixes, 59 copy=copy, indicator=indicator, ---> 60 validate=validate) 61 return op.get_result() 62
~/Envs/dask-dev/lib/python3.6/site-packages/pandas/core/reshape/merge.py in init(self, left, right, how, on, left_on, right_on, axis, left_index, right_index, sort, suffixes, copy, indicator, validate) 524 if not isinstance(right, DataFrame): 525 raise ValueError('can not merge DataFrame with instance of ' --> 526 'type {right}'.format(right=type(right))) 527 528 if not is_bool(left_index):
ValueError: can not merge DataFrame with instance of type <class 'pandas.core.series.Series'>
In [39]: pd.merge(a, b.to_frame(), on=['outer', 'inner']) Out[39]: A B outer inner a 1 2 1 b 1 4 3