Reputation: 582
I have two dataframes of the form: Table 1
sid student_details
1 A
2 B
3 C
Table 2
did dept_details
4 E
5 F
6 G
Table 3:
sid did
1 5
3 4
2 6
Now how to join dataframe1 and dataframe2 according to dataframe3 in pandas?
Upvotes: 2
Views: 241
Reputation: 863611
You can use double merge
:
print df1
sid student_details
0 1 A
1 2 B
2 3 C
print df2
did dept_details
0 4 E
1 5 F
2 6 G
print df3
sid did
0 1 5
1 3 4
2 2 6
print pd.merge(pd.merge(df1, df3, on=['sid']), df2, on=['did'])
sid student_details did dept_details
0 1 A 5 F
1 2 B 6 G
2 3 C 4 E
Or if you have set indexes:
print df1
student_details
sid
1 A
2 B
3 C
print df2
dept_details
did
4 E
5 F
6 G
print df3
did
sid
1 5
3 4
2 6
print pd.merge(pd.merge(df1, df3, left_index=True, right_index=True).set_index('did'),
df2, left_index=True, right_index=True)
student_details dept_details
did
4 C E
5 A F
6 B G
Upvotes: 0
Reputation: 2849
The idea is to join your df3 to the first one.
df = df1.set_index('sid').join(df3.set_index('sid')).reset_index()
df = df.set_index('did').join(df2.set_index('did')).reset_index().drop('did', 1)
Upvotes: 2