brucezepplin brucezepplin - 1 month ago 23
Python Question

python (pandas) merge two dataframes by index

Hi I have the following dataframes:

> df1
id begin conditional confidence discoveryTechnique
0 278 56 false 0.0 1
1 421 18 false 0.0 1

> df2
concept
0 A
1 B


how do I merge on the indexes to get:

id begin conditional confidence discoveryTechnique concept
0 278 56 false 0.0 1 A
1 421 18 false 0.0 1 B


I ask because it is my understanding that
merge()
i.e.
df1.merge(df2)
uses columns to do the matching.In fact doing this I get:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/pandas/core/frame.py", line 4618, in merge
copy=copy, indicator=indicator)
File "/usr/local/lib/python2.7/dist-packages/pandas/tools/merge.py", line 58, in merge
copy=copy, indicator=indicator)
File "/usr/local/lib/python2.7/dist-packages/pandas/tools/merge.py", line 491, in __init__
self._validate_specification()
File "/usr/local/lib/python2.7/dist-packages/pandas/tools/merge.py", line 812, in _validate_specification
raise MergeError('No common columns to perform merge on')
pandas.tools.merge.MergeError: No common columns to perform merge on


Is it bad practice to merge on index? Is it impossible? If so Ho can I shift the index into a new column called "index"?

Thanks

Answer

Use merge, by default there is inner join:

pd.merge(df1, df2, left_index=True, right_index=True)

Or join, by default there is left join:

df1.join(df2)

Or concat, by default there is outer join:

pd.concat([df1, df2], axis=1)