alam jamal
alam jamal

Reputation: 29

how to merge dataframe with different size in the same row

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

Answers (1)

Andrej Kesely
Andrej Kesely

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

Related Questions