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
0

1 Answer 1

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
Sign up to request clarification or add additional context in comments.

2 Comments

Thank you so much, It worked for me. Can you please guide me if I have to merge 12 such data frames.
nw, put all 12 dfs in this list = dfl=[df1, df2, df3] and we are done. Updated the point in answer as well

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.