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