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正确
如果需要,可以重命名列