Pandas:在列中填充 NaN 值,基于其他列 - 处理缺失值

时间:2021-02-25 13:53:33

标签: python python-3.x pandas dataframe

我有一个数据框 df,有很多 Student_ID,但在这里我给出了 df 的一部分,如下所示:

Student_Id       Exam_Date     feedback_given        ExamID
1001             01-05-2021       no                 physics:preparatory:1
1001             NaN              NaN                math:preparatory:2
1001             01-05-2021       yes                physics:midterm:1
1001             NaN              yes                Biology:preparatory:1
1001             02-05-2021       NaN                Biology:preparatory:2
1002             NaN              yes                physics:midterm:1
1002             NaN              yes                Biology:preparatory:1

如果可能的话,如何使用 Exam_datesffill() 或以任何其他方式填充 bfill(),以便我可以填充 Exam_Date For { {1}}。

注意:在上面的 Student_Id 中,dfStudent_Id ==1002 作为 Exam_Date,所以我想保留它 NaN本身,仅填充 NaN(即,如果 Student_Id ==1001 中的任何一个将所有 Student_ID 都设为空白,我希望它与 Exam_Date 保持相同)。

输出 NaN

df

在此先感谢您的帮助! :)

1 个答案:

答案 0 :(得分:1)

你应该先groupby然后ffill,即:

df['Exam_Date'] = df.groupby('Student_Id')['Exam_Date'].ffill() 

输出:

   Student_Id   Exam_Date feedback_given                 ExamID
0        1001  01-05-2021             no  physics:preparatory:1
1        1001  01-05-2021            NaN     math:preparatory:2
2        1001  01-05-2021            yes      physics:midterm:1
3        1001  01-05-2021            yes  Biology:preparatory:1
4        1001  02-05-2021            NaN  Biology:preparatory:2
5        1002         NaN            yes      physics:midterm:1
6        1002         NaN            yes  Biology:preparatory:1