Merging dataframes on index with pandas Merging dataframes on index with pandas pandas pandas

Merging dataframes on index with pandas


You should be able to use join, which joins on the index as default. Given your desired result, you must use outer as the join type.

>>> df1.join(df2, how='outer')            V1  V2A 1/1/2012  12  15  2/1/2012  14 NaN  3/1/2012 NaN  21B 1/1/2012  15  24  2/1/2012   8   9C 1/1/2012  17 NaN  2/1/2012   9 NaND 1/1/2012 NaN   7  2/1/2012 NaN  16

Signature: _.join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False) Docstring: Join columns with other DataFrame either on index or on a key column. Efficiently Join multiple DataFrame objects by index at once by passing a list.


You can do this with merge:

df_merged = df1.merge(df2, how='outer', left_index=True, right_index=True)

The keyword argument how='outer' keeps all indices from both frames, filling in missing indices with NaN. The left_index and right_index keyword arguments have the merge be done on the indices. If you get all NaN in a column after doing a merge, another troubleshooting step is to verify that your indices have the same dtypes.

The merge code above produces the following output for me:

                V1    V2A 2012-01-01  12.0  15.0  2012-02-01  14.0   NaN  2012-03-01   NaN  21.0B 2012-01-01  15.0  24.0  2012-02-01   8.0   9.0C 2012-01-01  17.0   NaN  2012-02-01   9.0   NaND 2012-01-01   NaN   7.0  2012-02-01   NaN  16.0