前向填充参考 ID 列
Forward Fill with Reference to ID column
假设我有一个数据框如下:
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年的score值。如果没有找到之前的值,则将其设置为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
我在 Whosebug、GeeksForGeeks 和 pandas 文档中也提到了 pandas ffil()
函数的几个解决方案,但没有太大帮助。有什么想法可以实现吗?
Groupby,ffill我觉得应该可以。
df[['Total_Marks','Previous_Marks']]=df.groupby('Roll_No')[['Total_Marks','Previous_Marks']].fillna(method='ffill')
假设我有一个数据框如下:
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年的score值。如果没有找到之前的值,则将其设置为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
我在 Whosebug、GeeksForGeeks 和 pandas 文档中也提到了 pandas ffil()
函数的几个解决方案,但没有太大帮助。有什么想法可以实现吗?
Groupby,ffill我觉得应该可以。
df[['Total_Marks','Previous_Marks']]=df.groupby('Roll_No')[['Total_Marks','Previous_Marks']].fillna(method='ffill')