假设我有一个如下的数据帧:
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 Marks
和Previous 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