我有一个数据框,其中包含一个名为SAM的列,其中包含以下数据
SAM
3
5
9
Nan
Nan
24
40
Nan
57
现在,我想分别在12
值中插入15
,43
和Nan
(因为9+3=12
,12+3=15
和{ {1}})。换句话说,通过将40+3=43
添加到上一行(也可以是Nan
)来填充任何3
行。
我知道这可以通过迭代for循环来完成。但我们能以矢量化的方式做到吗?就像Nan
中ffill
的某些修改版本(如果我们没有连续的NaN可以在这里使用的那样)。
答案 0 :(得分:7)
您可以尝试这种矢量化方法:
nul = df['SAM'].isnull()
nul.groupby((nul.diff() == 1).cumsum()).cumsum()*3 + df['SAM'].ffill()
#0 3.0
#1 5.0
#2 9.0
#3 12.0
#4 15.0
#5 24.0
#6 40.0
#7 43.0
#8 57.0
#Name: SAM, dtype: float64
SAM
列的前向填充值添加到结果中。