Merge multiple dataframes based on a common column [duplicate] Merge multiple dataframes based on a common column [duplicate] python python

Merge multiple dataframes based on a common column [duplicate]


Use merge and reduce

In [86]: from functools import reduceIn [87]: reduce(lambda x,y: pd.merge(x,y, on='Col1', how='outer'), [df1, df2, df3])Out[87]:    Col1  Col2  Col3  Col4  Col5  Col6  Col70  data1     3     4   7.0   4.0   NaN   NaN1  data2     4     3   6.0   9.0   5.0   8.02  data3     2     3   1.0   4.0   2.0   7.03  data4     2     4   NaN   NaN   NaN   NaN4  data5     1     4   NaN   NaN   5.0   3.0

Details

In [88]: df1Out[88]:    Col1  Col2  Col30  data1     3     41  data2     4     32  data3     2     33  data4     2     44  data5     1     4In [89]: df2Out[89]:    Col1  Col4  Col50  data1     7     41  data2     6     92  data3     1     4In [90]: df3Out[90]:    Col1  Col6  Col70  data2     5     81  data3     2     72  data5     5     3


Using pd.concat:

df1.set_index('Col1',inplace=True)df2.set_index('Col1',inplace=True)df3.set_index('Col1',inplace=True)df = pd.concat([df1,df2,df3],axis=1,sort=False).reset_index()df.rename(columns = {'index':'Col1'})    Col1    Col2    Col3    Col4    Col5    Col6    Col70   data1   3       4       7.0     4.0     NaN     NaN1   data2   4       3       6.0     9.0     5.0     8.02   data3   2       3       1.0     4.0     2.0     7.03   data4   2       4       NaN     NaN     NaN     NaN4   data5   1       4       NaN     NaN     5.0     3.0


You can do

df1.merge(df2, how='left', left_on='Col1', right_on='Col1').merge(df3, how='left', left_on='Col1', right_on='Col1')