#python-3.x #pandas #dataframe
#python-3.x #pandas #фрейм данных
Вопрос:
У меня есть pd.DataFrame, в котором в каждой строке указаны показатели успеваемости учащихся на экзаменах. У каждого учащегося есть уникальный идентификатор, и у каждого учащегося есть уникальная строка для вопросов, которые они решили на экзамене. Например, студент с идентификатором «a1a1» попытался задать два вопроса, тогда как студент с идентификатором «w2e3» попытался задать только один вопрос. (пример df)
Я хочу найти студентов, которые пытались решить менее 3 вопросов, и удалить связанные с ними строки из фрейма данных. Как я могу это сделать с помощью методов pd.DataFrame?
Комментарии:
1. problemID — это просто уникальный идентификационный номер для каждой проблемы. Каждая строка представляет собой вопрос, решенный учащимся, поэтому, если вопрос решал три вопроса, у него / нее есть три строки (записи) в этом фрейме данных
Ответ №1:
Использовать value_counts()
на studentID
import pandas as pd
df = pd.DataFrame({'studentID':['a','a','a','b','b','b', 'c'],
'problemID':[1,2,3,1,2,3,1]})
print(df)
tmp = df['studentID'].value_counts()
tmp = tmp[tmp >= 3]
new_df = df[df['studentID'].isin(tmp.index)]
print(new_df)
Вывод:
studentID problemID
0 a 1
1 a 2
2 a 3
3 b 1
4 b 2
5 b 3
6 c 1
studentID problemID
0 a 1
1 a 2
2 a 3
3 b 1
4 b 2
5 b 3
Комментарии:
1. это просто возвращает к списку, как я могу удалить эти записи из моего исходного фрейма данных
2. Ошибка атрибута: объект ‘builtin_function_or_method’ не имеет атрибута ‘index’
3. Извините, теперь это должно сработать, я немного поторопился
4. Я просто не понимаю, зачем
.index
это нужно в последней строке5.
tmp
Потому что серия имеет имя студентов в качестве индекса и количество решенных задач в качестве значений.