Pandas使用与其他一些pandas列对应的先前值填充NaN

时间:2016-12-13 01:20:04

标签: python pandas

我有一个非常大的数据框,如下所示:

    fraction     id                
0   0.729797       0 
1   0.141084       1 
2   0.226900       2 
3   0.960937       3 
4   0.452835       4 
5   NaN            1 
6   0.352142       2 
7   0.104814       3 
8   0.345633       4 
9   0.498004       1 
10   0.131665       2 
11   NaN            3 
12   0.886092       4 
13   0.839767       1 
14   0.257997       2 
15   0.526350       3 

目前,我只是使用以下代码行填充NaN数据:

df.fillna(0,inplace=True)

有没有办法使用先前的"分数来填充所有NaN数据"价值使用相应的" id" s?

例如,索引#5的行具有"分数"的NaN值,并且具有" id"值1.先前的"分数" id#1的值是0.141084。

有没有办法替换这个值,并对整个数据帧执行此操作?

谢谢

1 个答案:

答案 0 :(得分:2)

groupby上执行'id',然后使用ffill转发填充:

df['fraction'] = df.groupby('id')['fraction'].ffill()

请注意,您可以省略['fraction'],一次对DataFrame中的所有列执行相同的处理。对于示例数据,输出相同:

df = df.groupby('id').ffill()

结果输出:

    fraction  id
0   0.729797   0
1   0.141084   1
2   0.226900   2
3   0.960937   3
4   0.452835   4
5   0.141084   1
6   0.352142   2
7   0.104814   3
8   0.345633   4
9   0.498004   1
10  0.131665   2
11  0.104814   3
12  0.886092   4
13  0.839767   1
14  0.257997   2
15  0.526350   3