pandas的df.groupby后,怎么按条件替换列值?

问题遇到的现象和发生背景

举个例子,我现在有一个Dataframe,想要找出其中同时拥有两个课程的班级,然后替换其班级下所有同学的课程为"全能"

问题相关代码,请勿粘贴截图

df = pd.DataFrame({'班级':['A','B','C','C','D','E','E'],
'姓名':['a','b','c','d','e','f','g'],
'课程':['数学','数学','语文','数学','数学','语文','数学']
})

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

预期结果是班级3和班级5的所有同学的课程都是'全能'
预期结果类似:
df = pd.DataFrame({'班级':['A','B','C','C','D','E','E'],
'姓名':['a','b','c','d','e','f','g'],
'课程':['数学','数学','全能','全能','数学','全能','全能']
})


new_df= df.groupby(['班级'])['课程'].agg('nunique').reset_index()
res = new_df.loc[new_df['课程'] == 2]['班级'].tolist()
new_df.loc[new_df['班级'].isin(res),'课程'] = '全能'

import pandas as pd

df = pd.DataFrame({'班级':['A','B','C','C','D','E','E'],
'姓名':['a','b','c','d','e','f','g'],
'课程':['数学','数学','语文','数学','数学','语文','数学']
})
print(df)
def f(series):
    if len(set(df[df.班级==series['班级']]['课程'].tolist())) == 2:
        return '全能'
    else:
        return series['课程']
df['课程'] = df.apply(f, axis = 1)
print(df)

import pandas as pd
df = pd.DataFrame({'班级':['A','B','C','C','D','E','E'],
'姓名':['a','b','c','d','e','f','g'],
'课程':['数学','数学','语文','数学','数学','语文','数学']
})
df.课程[df.班级.isin(['C','E'])]='全能'
print(df)

还有我想说,如果你groupby,怎么还会是你展现的结果呢?