我有 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 中的一个,这很好,我想通过使用 pandas 或 numpy 方法和函数在新数据框 (final_df) 中显示 1 否则显示 0。
final_df(最后):
student_id | 好吗? |
---|---|
a1m | 1 |
4Gn | 0 |
scw | 1 |
nF4c | 0 |
fWz | 0 |
我写了这段代码:
final_df = student_data.loc[(student_data['score'] == 18) | (student_data['score'] == 19) | (student_data['score'] == 20)]
但它不完整,我想知道需要哪些条件来完成我的代码。
答案 0 :(得分: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 :(得分:1)
使用np.where
例如:
student_data['Ok'] = np.where(student_data['score'].isin([18, 19, 20]), 1, 0)