根据另一个数据帧的匹配结果在数据帧中创建新列

时间:2021-04-27 10:20:55

标签: python pandas dataframe

我有一个数据框 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)。你能建议我该怎么做吗?非常感谢!

2 个答案:

答案 0 :(得分:3)

您可以在 df1df2 上执行左 .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, False1,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