Reputation: 29
I need a value exactly in the same row which should be mapped with roll number
Df2
roll_number 1 2 3 4 5
ABCDEFG01HY NaN NaN NaN NaN NaN
ABCDEFG02HY NaN NaN NaN NaN NaN
ABCDEFG03HY NaN NaN NaN NaN NaN
ABCDEFG04HY NaN NaN NaN NaN NaN
ABCDEFG05HY NaN NaN NaN NaN NaN
ABCDEFG06HY NaN NaN NaN NaN NaN
Df1
1 3 4
ABCDEFG01HY ABCDEFG01HY ABCDEFG05HY
ABCDEFG02HY ABCDEFG03HY NaN
NaN ABCDEFG05HY NaN
My Merged Table should be like this
roll_number 1 2 3 4 5
ABCDEFG01HY ABCDEFG01HY NaN ABCDEFG01HY NaN NaN
ABCDEFG02HY ABCDEFG02HY NaN NaN NaN NaN
ABCDEFG03HY NaN NaN ABCDEFG03HY NaN NaN
ABCDEFG04HY NaN NaN NaN NaN NaN
ABCDEFG05HY NaN NaN ABCDEFG05HY ABCDEFG05HY NaN
ABCDEFG06HY NaN NaN NaN NaN NaN
But I got this output
roll_number 1 2 3 4 5
ABCDEFG01HY ABCDEFG01HY NaN ABCDEFG01HY ABCDEFG05HY NaN
ABCDEFG02HY ABCDEFG02HY NaN ABCDEFG03HY NaN NaN
ABCDEFG03HY NaN NaN ABCDEFG05HY NaN NaN
ABCDEFG04HY NaN NaN NaN NaN NaN
ABCDEFG05HY NaN NaN NaN NaN NaN
ABCDEFG06HY NaN NaN NaN NaN NaN
I am using this code to merge dataframe
a=self.df1.columns.astype(int)
for i in range(len(a)):
self.df2[a[i]]=self.df2.merge(self.df1,left_on="Roll Number",right_on=a[i], how='right')
Upvotes: 1
Views: 48
Reputation: 195418
Try:
for c in df1:
df2[c] = df2.merge(df1[c], left_on="roll_number", right_on=c, how="left")[
f"{c}_y"
]
print(df2)
Prints:
roll_number 1 2 3 4 5
0 ABCDEFG01HY ABCDEFG01HY NaN ABCDEFG01HY NaN NaN
1 ABCDEFG02HY ABCDEFG02HY NaN NaN NaN NaN
2 ABCDEFG03HY NaN NaN ABCDEFG03HY NaN NaN
3 ABCDEFG04HY NaN NaN NaN NaN NaN
4 ABCDEFG05HY NaN NaN ABCDEFG05HY ABCDEFG05HY NaN
5 ABCDEFG06HY NaN NaN NaN NaN NaN
Upvotes: 1