0

I have a 3 dfs as shown below

df1:

ID      March_Number      March_Amount
A       10                200
B       4                 300
C       2                 100

df2:

ID      Feb_Number        Feb_Amount
A       1                 100
B       8                 500
E       4                 400
F       8                 100
H       4                 200

df3:

ID      Jan_Number        Jan_Amount
A       6                 800
H       3                 500
B       1                 50
G       8                 100

I tried below code and worked well.

df_outer = pd.merge(df1, df2, on='ID', how='outer')
df_outer = pd.merge(df_outer , df3, on='ID', how='outer')

But would like to pass all df together and merge at a short. I tried below code with error as shown.

df_outer = pd.merge(df1, df2, df3, on='ID', how='outer')

please guide me, how to merge if I have 12 months of data. i.e I have to merge 12 dfs.

Error:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-32-a63627da7233> in <module>
----> 1 df_outer = pd.merge(df1, df2, df3, on='ID', how='outer')

TypeError: merge() got multiple values for argument 'how'

Expected output:

ID  March_Number    March_Amount    Feb_Number  Feb_Amount  Jan_Number  Jan_Amount
A   10.0            200.0           1.0         100.0       6.0         800.0
B   4.0             300.0           8.0         500.0       1.0         50.0
C   2.0             100.0           NaN         NaN         NaN         NaN
E   NaN             NaN             4.0         400.0       NaN         NaN
F   NaN             NaN             8.0         100.0       NaN         NaN
H   NaN             NaN             4.0         200.0       3.0         500.0
G   NaN             NaN             NaN         NaN         8.0         100.0
Danish
  • 2,719
  • 17
  • 32

1 Answers1

1

We can create a list of dfs in this case dfl which we want to merge and then we can merge them together.

We can add as many dfs as we want in dfl=[df1, df2, df3,..., dfn]

from functools import reduce
dfl=[df1, df2, df3]
df_merged = reduce(lambda  left,right: pd.merge(left,right,on=['ID'],
                                            how='outer'), dfl)

Output

    ID  March_Number    March_Amount    Feb_Number  Feb_Amount  Jan_Number  Jan_Amount
0   A   10.0    200.0   1.0     0.0     6.0     800.0
1   B   4.0     300.0   8.0     500.0   1.0     50.0
2   C   2.0     100.0   NaN     NaN     NaN     NaN
3   E   NaN     NaN     4.0     400.0   NaN     NaN
4   F   NaN     NaN     8.0     0.0     NaN     NaN
5   H   NaN     NaN     4.0     200.0   3.0     500.0
6   G   NaN     NaN     NaN     NaN     8.0     100.0
Utsav
  • 5,572
  • 2
  • 29
  • 43
  • Thank you so much, It worked for me. Can you please guide me if I have to merge 12 such data frames. – Danish May 10 '21 at 08:17
  • 1
    nw, put all 12 dfs in this list = `dfl=[df1, df2, df3]` and we are done. Updated the point in answer as well – Utsav May 10 '21 at 08:17