如何在同一行中合并不同大小的数据框

how to merge dataframe with different size in the same row

我需要一个完全位于同一行的值,该值应与卷号映射

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 

我合并后的Table应该是这样的

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

但是我得到了这个输出

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

我正在使用这段代码合并数据框


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')

尝试:

for c in df1:
    df2[c] = df2.merge(df1[c], left_on="roll_number", right_on=c, how="left")[
        f"{c}_y"
    ]

print(df2)

打印:

   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