python - 在出现 nan 之前返回最后一个非空值
问题描述
我有一个带有 null 而不是 null 值的系列“s”:
s = pd.Series([np.nan, 5, 4, 2, np.nan, np.nan, 4, 3, np.nan])
我需要在每个 np.nan 之前获取返回的最后一个非空值“s1”:
s1 = [np.nan, np.nan, np.nan, 2, np.nan, np.nan, np.nan, 3, np.nan]
提前谢谢了。
问候汤姆
解决方案
让我们创建一个 grouper 使用Series.isna
+Series.cumsum
来识别连续的非NaN
值块,然后groupby
这个 grouper 上的系列并transform
使用last
finally 来掩盖 grouper 中的值duplicated
:
g = s.isna().cumsum()
s1 = s.groupby(g).transform('last').mask(g.duplicated(keep='last'))
结果:
print(s1)
0 NaN
1 NaN
2 NaN
3 2.0
4 NaN
5 NaN
6 NaN
7 3.0
8 NaN
dtype: float64
推荐阅读
- api - WIN10 | 使用代码配置打印机属性
- javascript - 你好我试图让机器人回应“给定用户已经静音”
- jenkins - Jenkins Pipeline - 删除尾随逗号的 Groovy 字符串函数
- amazon-web-services - aws lambda sam build 上的 Rasterio 安装错误
- python - 一列文本的BERT摘要
- forms - MS Access:如何使用下拉组合框控件填充表单中的多个文本字段
- web-component - 如何在 stenciljs 中调用第三方组件的方法
- ssl - 如何在 TCP 模式下使用 haproxy 传递自定义 SNI
- javascript - Nodemon 显示正在重新启动,但实际上没有
- java - CSV阅读器丢失转义字符