поиск определенных значений в фрейме данных pandas и условие записи на них

#pandas #dataframe #numpy

Вопрос:

У меня есть фрейм данных student_data.

 import pandas as pd
student_data = pd.DataFrame({'studen_id':  ['fWz', 'a1m', 'a1m','4Gn','scw', 'scw', 'nF4c', 'a1m', 'scw', '4Gn', 'fWz' ],
'score': [' ', 15, 14, 11, 20, ' ', 9, 19, 17, 3, ' '] })
 

Я хочу выполнить поиск в этом фрейме данных, и
если у каждого student_id есть один из 18, 19 или 20 баллов, это хорошо, и я хочу показать его на 1 или 0 в новом фрейме данных(final_df), используя методы и функции pandas или numpy.

final_df (наконец-то):

идентификатор студента хорошо ?
a1m 1
4Гн 0
scw 1
nF4c 0
fWz 0

Я пишу этот код:

 final_df = student_data.loc[(student_data['score'] == 18) | (student_data['score'] == 19) | (student_data['score'] == 20)]
 

но он не завершен, и я хочу знать, какие условия необходимы для завершения моего кода.

Ответ №1:

 #your sample dataframe:
student_data = pd.DataFrame({'student_id':  ['fWz', 'a1m', 'a1m','4Gn','scw', 'scw', 'nF4c', 'a1m', 'scw', '4Gn', 'fWz' ],
'score': [' ', 15, 14, 11, 20, ' ', 9, 19, 17, 3, ' '] })
 

пробовать:

 student_data['ok?']=student_data['score'].isin([18,19,20]).astype(int)
 

Окончательно:

 final_df=(student_data.sort_values('ok?',ascending=False)
                          .drop_duplicates(subset=['student_id'])
                          .drop('score',1)
                          .reset_index(drop=True))
 

выход из final_df :

     student_id  ok?
0   scw         1
1   a1m         1
2   fWz         0
3   4Gn         0
4   nF4c        0
 

Комментарии:

1. Ошибка ключа: Индекс([‘student_id’], dtype=’объект’)

2. @Kia, потому что в вашем образце фрейма данных есть опечатка в названии student_data =pd.DataFrame({'studen_id': , поэтому исправьте ее 'student_id': , а затем попробуйте

Ответ №2:

Воспользуйся np.where

Экс:

 student_data['Ok'] = np.where(student_data['score'].isin([18, 19, 20]), 1, 0)