如何解决前向填充参考 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 Marks
和 PrevIoUs Marks
进行前向填充,以便对于特定的 Roll No
,空值被替换为它们之前出现的值。
例如,在 Total Marks
列中,1001 号卷在 2005 年的值为 595
,在 2006 年为 NaN
,在 2007 年为 597
,以及NaN
在 2008 年。我希望将 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()
函数引用了几个解决方案,但没有太大帮助。任何想法如何实现?
解决方法
Groupby,我认为应该做。
df[['Total_Marks','Previous_Marks']]=df.groupby('Roll_No')[['Total_Marks','Previous_Marks']].fillna(method='ffill')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。