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 上应用前向填充 . 我怎样才能做到这一点?
1 回答
2
对于所有列,使用GroupBy.ffill为每个组的前向填充,但如果每个组的第一个值是 NaN s,则没有替换,因此可以使用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
1 回答
对于所有列,使用GroupBy.ffill为每个组的前向填充,但如果每个组的第一个值是
NaN
s,则没有替换,因此可以使用fillna并最后转换为整数:详情:
要么: