首页 > 解决方案 > 在出现 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]

提前谢谢了。

问候汤姆

标签: pythonpandasnumpy

解决方案


让我们创建一个 grouper 使用Series.isna+Series.cumsum来识别连续的非NaN值块,然后groupby这个 grouper 上的系列并transform使用lastfinally 来掩盖 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

推荐阅读