Python 在特定条件下合并两个不同长度的数据帧

Python 在特定条件下合并两个不同长度的数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,我有第一个数据框“研究”:它代表学院所有学生的名字 col1 A B C D E F 我的第二个数据框是“学生”:这是一组特定学科的学生 name pass C 1 F 1 B 1 我想从上述两个数据帧中创建一个数据帧,如下所示: df3 = Study.merge(Student, left_on="col1", right_on="name", how="left") dataframe

我有第一个数据框“研究”:它代表学院所有学生的名字

col1
A
B
C
D
E
F
我的第二个数据框是“学生”:这是一组特定学科的学生

name   pass
C       1
F       1
B       1
我想从上述两个数据帧中创建一个数据帧,如下所示:

df3 = Study.merge(Student, left_on="col1", right_on="name", how="left")
dataframe3:

col1 value
A      False
B      True
C      True
D      False
E      False
F      True
这表示学生B、C和F在“学生”数据框中的值为1,其余的都不存在

我尝试使用pandas中的merge方法执行此操作,如下所示:

df3 = Study.merge(Student, left_on="col1", right_on="name", how="left")
但结果是:

col1     name    pass
A        nan     nan
B        B       1
C        C       1
D        nan     nan
E        nan     nan
F        F       1

要获得上面所示的dataframe3,我可以通过删除列名来处理这个问题,并可能用false替换nan,用True替换1,但是有没有其他更好的方法来处理这个问题。

您可以检查
df1['col1']
是否在
df2['name']
中:

df3 = df1.assign(value=df1['col1'].isin(df2['name']))
df3
输出:

  col1  value
0    A  False
1    B   True
2    C   True
3    D  False
4    E  False
5    F   True
如果您的第二个数据帧“Student”不仅包含所有通过值1(可以是0),还可以执行以下操作:

df_merge = Study.merge(Student, left_on='col1', right_on='name', how='left')
df_merge['value'] = df_merge['pass'].eq(1)
df_merge = df_merge.drop(['name', 'pass'], axis=1)
结果:

print(df_merge)

  col1  value
0    A  False
1    B   True
2    C   True
3    D  False
4    E  False
5    F   True


合并后只取所需的列,即
col1
pass
,并用
False
填充
NaN

df3=Study.merge(Student,left_on=“col1”,right_on=“name”,how=“left”)[[[[col1”,“pass']”。fillna(False)
现在只需将pass列转换为
boolean
类型

df3['pass']=df3['pass'].astype(bool)
输出

df3
col1通行证
0一个错误
1 B正确
2 C正确
三维假
4 E错误
5 F正确
如果需要,可以重命名列