Как проверить аггрегированное значения группы?

В наборе данных есть такой DataFrame:

класс    процент    доп_инфа
первый     60        впрвер
первый     40        рверв
второй     50        пыкпыевн
второй     20        ервер
третий     80        кнукнф
третий     10        венврке

Необходимо узнать, какие классы НЕ имеют сумму 100. В моём случае - это второй и третий. Таким образом, ответом должен быть:

Out[]: 
класс      процент
второй     70
третий     90

Попытался сделать вот так, но выводит полностью DataFrame со значениями NaN:

sm = data[data.groupby('класс').sum()]
data.where(sm != 100)

Ответы (2 шт):

Автор решения: Danis

в pandas не разбираюсь:

dict_ = {}
for class_, procent in zip(data["класс"], data["процент"]):
    try:
        dict_[class_] +=procent
    except:
        dict_[class_] = procent

for class_, procent in dict_.items():
    if procent == 100:
        continue
    print(class_, procent)
→ Ссылка
Автор решения: MaxU

Вариант 1

группируем, суммируем, фильтруем по сумме:

res = df.groupby("класс")["процент"].sum().reset_index().query("процент != 100")

Вариант 2

Сначала получаем индексы строк, для которых сумма в столбце процент не равна 100. Затем фильтруем, группируем и суммируем:

idx = df.groupby("класс")["процент"].filter(lambda x: x.sum() != 100).index
res = df.loc[idx].groupby("класс")["процент"].sum().reset_index()

Результат:

In [13]: res
Out[13]:
    класс  процент
0  второй       70
1  третий       90
→ Ссылка