如何在同一行中合并不同大小的数据框
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
我需要一个完全位于同一行的值,该值应与卷号映射
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