如何为大Pandas的每一组做前向填充

2024-04-19 22:20:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类似下面的数据帧

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

我想对前向填充中的第ABC列进行空值插补,但对于每个组。这意味着,我希望对每个id应用前向填充。我怎么能做到呢?在


Tags: 数据idnan空值
1条回答
网友
1楼 · 发布于 2024-04-19 22:20:11

使用^{}对所有列按组向前填充,但如果每个组的第一个值是NaNs,则没有替换,因此可以使用^{}和最后一次转换为整数:

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

详细信息:

^{pr2}$

或者:

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

相关问题 更多 >