Вы можете поместить несколько условий в оператор, например
len( df[ (df.ModuleCode.str.contains(sub)) & (df.Grade=='A') ] )
Вы можете сохранить эту информацию как новый столбец, если хотите, например,
df['met_conditions'] = (df.ModuleCode.str.contains(sub)) & (df.Grade=='A')