#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)