如何解决df nan值的不同处理
我有这样的df:
A B
0 1 5
1 1 7
2 NaN NaN
3 1 8
4 NaN NaN
5 NaN NaN
6 2 6
7 2 2
8 NaN NaN
9 NaN NaN
10 2 3
现在,我想用与外部不同的方式填充事件中的nan值。一个事件由A列标识,并且具有相同的值(在我的示例中为事件1和2)。 A列应仅包含事件中的事件编号。对于B列,应传送事件中的最后一个条目。 在事件之间,NaN值应设置为“ 0”。
我尝试了ffill()
和fillna()
,但无法与我的条件相匹配。
预期结果:
A B
0 1 5
1 1 7
2 1 7
3 1 8
4 0 0
5 0 0
6 2 6
7 2 2
8 2 2
9 2 2
10 2 3
感谢您的帮助:)
解决方法
您可以将GroupBy.ffill
与Series.mask
创建的助手组一起使用,并通过反冲值进行比较以防止组之间遗漏值,最后将丢失的值替换为0
和整数:
s = df.A.ffill()
g = df.A.mask(s.eq(df.A.bfill()),s)
df = df.groupby(g).ffill().fillna(0).astype(int)
print (df)
A B
0 1 5
1 1 7
2 1 7
3 1 8
4 0 0
5 0 0
6 2 6
7 2 2
8 2 2
9 2 2
10 2 3
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。