首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫填充剂对特定细胞的填充

熊猫填充剂对特定细胞的填充
EN

Stack Overflow用户
提问于 2022-06-05 09:33:13
回答 1查看 73关注 0票数 0

我们有数据表示用户的惩罚计数有NaN,随时间变化(值只上升)。以下是数据的子集:

代码语言:javascript
复制
import pandas as pd
import numpy as np
d = {'day':['Monday','Monday','Monday','Tuesday','Tuesday','Tuesday','Wednesday','Thursday','Thursday','Friday'],
     'user_id': [1, 4,2,4,4,2,2,1,2,1], 'penalties_count': [1, 3,2,np.nan,4,2,np.nan,2,3,3]}
df = pd.DataFrame(data=d)
display(df)


      day   user_id     penalties_count
0   Monday      1       1.0
1   Monday      4       3.0
2   Monday      2       2.0
3   Tuesday     4       NaN
4   Tuesday     4       4.0
5   Tuesday     2       2.0
6   Wednesday   2       NaN
7   Thursday    1       2.0
8   Thursday    2       3.0
9   Friday      1       3.0

目标是用以前的值填充NaN单元,但只用于特定的user_id。其结果应该是:

代码语言:javascript
复制
     day     user_id  penalties_count
0   Monday      1       1.0
1   Monday      4       3.0
2   Monday      2       2.0
3   Tuesday     4       3.0
4   Tuesday     4       4.0
5   Tuesday     2       2.0
6   Wednesday   2       2.0
7   Thursday    1       2.0
8   Thursday    2       3.0
9   Friday      1       3.0

但当我用

df.fillna(method='bfill')对于user_id=4的第4行中的结果是不正确的(我们应该在这里看到3,而不是4):

代码语言:javascript
复制
     day     user_id  penalties_count
0   Monday      1       1.0
1   Monday      4       3.0
2   Monday      2       2.0
3   Tuesday     4       4.0
4   Tuesday     4       4.0
5   Tuesday     2       2.0
6   Wednesday   2       2.0
7   Thursday    1       2.0
8   Thursday    2       3.0
9   Friday      1       3.0

怎样才能解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-05 09:51:54

如果要按组填充NA,则需要在填充NA之前先使用groupby。而且,您似乎需要ffill,但不需要bfill。就像df.groupby("user_id")["penalties_count"].ffill()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72506214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档