首页 > 解决方案 > 在 pandas 数据框中搜索特定值并在其上写入条件

问题描述

我有 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 显示它,否则在新数据框(final_df)中显示 0,通过使用熊猫或 numpy 方法和函数。

final_df(最后):

学生卡 好的?
1米 1
4Gn 0
上一页 1
nF4c 0
频率 0

我写了这段代码:

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

但它并不完整,我想知道完成我的代码需要哪些条件。

标签: pandasdataframenumpy

解决方案


#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

推荐阅读