引用ID列的正向填充

假设我有一个如下的数据帧:

Roll No  |  Name  |  School  |  Year  |  Total Marks  |  Previous Marks
------------------------------------------------------------------------
1001     |  abc   |   iisr   |  2005  |      595      |      NaN
1002     |  amr   |   iisd   |  2005  |      599      |      NaN
1001     |  abc   |   iisr   |  2006  |      NaN      |      580
1003     |  def   |   hmms   |  2005  |      600      |      575
1002     |  amr   |   iisd   |  2006  |      NaN      |      590
1004     |  ghi   |  aaiisr  |  2005  |      580      |      NaN
1005     |  jkl   |   ups    |  2005  |      599      |      500
1001     |  abc   |   iisr   |  2007  |      597      |      NaN
1002     |  amr   |   iisd   |  2007  |      600      |      NaN
1005     |  jkl   |   ups    |  2006  |      NaN      |      503
1006     |  mno   |   iisr   |  2005  |      NaN      |      480
1001     |  abc   |   iisr   |  2008  |      NaN      |      575
1007     |  pqr   |   kms    |  2005  |      NaN      |      575
1002     |  amr   |   iisd   |  2008  |      NaN      |      499

我希望向前填充列Total MarksPrevious Marks,以便对于特定的Roll No,空值将替换为它们之前出现的值。

例如,在Total Marks列中,第1001号辊的值为2005年的595、2006年的NaN、2007年的597和2008年的NaN。我希望将2006年1001的空值替换为先前填充的分数(即2005的分数),并将2007年的空值替换为2008年的分数值。如果未找到前一个值,则将其设置为NaN。应用于Previous Marks列的逻辑相同。

以上述格式向前填充后,我的最终数据帧应如下所示:

Roll No  |  Name  |  School  |  Year  |  Total Marks  |  Previous Marks
------------------------------------------------------------------------
1001     |  abc   |   iisr   |  2005  |      595      |      NaN
1002     |  amr   |   iisd   |  2005  |      599      |      NaN
1001     |  abc   |   iisr   |  2006  |      595      |      580
1003     |  def   |   hmms   |  2005  |      600      |      575
1002     |  amr   |   iisd   |  2006  |      599      |      590
1004     |  ghi   |  aaiisr  |  2005  |      580      |      NaN
1005     |  jkl   |   ups    |  2005  |      599      |      500
1001     |  abc   |   iisr   |  2007  |      597      |      580
1002     |  amr   |   iisd   |  2007  |      600      |      590
1005     |  jkl   |   ups    |  2006  |      599      |      503
1006     |  mno   |   iisr   |  2005  |      NaN      |      480
1001     |  abc   |   iisr   |  2008  |      597      |      575
1007     |  pqr   |   kms    |  2005  |      NaN      |      575
1002     |  amr   |   iisd   |  2008  |      600      |      499

我在StackOverflow、GeeksForGeeks和pandas文档中提到了几个用于pandas ffil()函数的解决方案,但没有太大帮助。有什么想法可以实现这一点吗?

转载请注明出处:http://www.wxmcsj.com/article/20230331/2514440.html