Это будет довольно медленно, если применить к большому набору данных. Рекомендую использовать маску или loc;
df['level'] = 'advanced'
df.loc[3.01 <= df.points < 8.5, 'level'] = 'intermediate'
df.loc[0 <= df.points < 3.01, 'level'] = 'basic'
Должно быть намного быстрее.
РЕДАКТИРОВАТЬ
О, я думал, что это сработает, но это не так. Используйте это вместо;
df.loc[(df.points >= 3.01) & (df.points < 8.5), 'level'] = 'intermediate'
df.loc[(df.points >= 0) & (df.points < 3.01), 'level'] = 'basic'