在熊猫数据框中搜索特定值并在其上写入条件

时间:2021-06-15 15:20:02

标签: 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 中的一个,这很好,我想通过使用 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)]

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

2 个答案:

答案 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)