我有一个数据框 df1,它存储当前注册的课程和上一门课程。
课程 | previous_course |
---|---|
CS201 | CS101 |
CS201 | CS102 |
CS201 | CS103 |
CS202 | CS101 |
CS202 | CS102 |
CS202 | CS103 |
有些课程有先决条件,它们也存储在数据框df2中(这是一对多的关系,一门课程可以有多个先决条件)
课程 | 先决条件 |
---|---|
CS201 | CS101 |
CS202 | CS102 |
CS202 | CS103 |
我想匹配 df1 中的 previous_course 是否为先决条件,并创建另一列(1 或 0)。你能建议我该怎么做吗?非常感谢!
答案 0 :(得分:3)
您可以在 df1
和 df2
上执行左 .merge()
,然后使用 np.where()
根据加入的 prerequisite
列创建新列,如下所示:
df3 = pd.merge(df1, df2, left_on=['course', 'previous_course'], right_on=['course', 'prerequiste'], how='left')
df3['is_prerequiste'] = np.where(df3['prerequiste'].notna(), 1, 0)
print(df3)
course previous_course prerequiste is_prerequiste
0 CS201 CS101 CS101 1
1 CS201 CS102 NaN 0
2 CS201 CS103 NaN 0
3 CS202 CS101 NaN 0
4 CS202 CS102 CS102 1
5 CS202 CS103 CS103 1
答案 1 :(得分:3)
在 DataFrame.merge
中使用指标参数,通过 both
进行比较并转换为整数以映射 True, False
到 1,0
:
df = pd.merge(df1, df2, left_on=['course', 'previous_course'],
right_on=['course', 'prerequiste'],
how='left',
indicator='is_prerequiste')
df['is_prerequiste'] = df['is_prerequiste'].eq('both').astype(int)
print (df)
course previous_course prerequiste is_prerequiste
0 CS201 CS101 CS101 1
1 CS201 CS102 NaN 0
2 CS201 CS103 NaN 0
3 CS202 CS101 NaN 0
4 CS202 CS102 CS102 1
5 CS202 CS103 CS103 1