如何对pandas中的每个组进行前填
发布于 2021-01-29 17:40:42
我有一个类似于下面的数据框
id A B C D E
1 2 3 4 5 5
1 NaN 4 NaN 6 7
2 3 4 5 6 6
2 NaN NaN 5 4 1
我想为列做一个空值估算A
,B
,C
在正向充填,但每个组。那就是说,我希望将前向填充应用于每个id
。我怎样才能做到这一点?
关注者
0
被浏览
30
1 个回答
-
使用
GroupBy.ffill
每团体向前填充所有列,但如果每个小组第一值是NaN
在那儿没有更换,所以可以使用fillna
和最后浇铸成整数:print (df) id A B C D E 0 1 2.0 3.0 4.0 5 NaN 1 1 NaN 4.0 NaN 6 NaN 2 2 3.0 4.0 5.0 6 6.0 3 2 NaN NaN 5.0 4 1.0 cols = ['A','B','C'] df[['id'] + cols] = df.groupby('id')[cols].ffill().fillna(0).astype(int) print (df) id A B C D E 0 1 2 3 4 5 NaN 1 1 2 4 4 6 NaN 2 2 3 4 5 6 6.0 3 2 3 4 5 4 1.0
详情:
print (df.groupby('id')[cols].ffill().fillna(0).astype(int)) id A B C 0 1 2 3 4 1 1 2 4 4 2 2 3 4 5 3 2 3 4 5
要么:
cols = ['A','B','C'] df.update(df.groupby('id')[cols].ffill().fillna(0)) print (df) id A B C D E 0 1 2.0 3.0 4.0 5 NaN 1 1 2.0 4.0 4.0 6 NaN 2 2 3.0 4.0 5.0 6 6.0 3 2 3.0 4.0 5.0 4 1.0