我有一个非常大的数据框,如下所示:
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。
有没有办法替换这个值,并对整个数据帧执行此操作?
谢谢
答案 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