gpt4 book ai didi

python - 结合 bfill() 和 ffill() 功能

转载 作者:太空狗 更新时间:2023-10-30 02:36:29 29 4
gpt4 key购买 nike

假设我有以下 pd.Series:

0     NaN
1 NaN
2 4.0
3 NaN
4 NaN
5 7.0
6 NaN
7 NaN
8 NaN
9 NaN
10 1.0
11 NaN
12 NaN
13 6.0
14 NaN
15 NaN

我正在尝试获取一个系列,其中 NaN 由周围的有效样本平均填充。所以说我在两个有效样本之间有 N NaNs,我希望第一个 N/2 NaNs 是由最后一个有效样本填充,最后一个 N/2 NaNs 将使用下一个有效观察值填充。在 (N % 2) =! 0,额外的观察值可以被周围的两个观察值中的任何一个填充,适用哪个规则就可以。所以我想获得:

0     4
1 4
2 4
3 4
4 7
5 7
6 7
7 7
8 1
9 1
10 1
11 1
12 6
13 6
14 6
15 6

最佳答案

想法是用 where 创建 bool 掩码和过滤器 bfill ,然后 ffill 和最后一个 bfill 再次仅用于第一个系列的第一个值,如果以 NaN 开头:

m = df['A'].notna()
c = m.cumsum()

def f(x):
lens = len(x.index)
a = np.arange(lens)
return a // (lens / 2) == 0

mask = c[~m].groupby(c).transform(f)
#should be removed
#mask = mask.reindex(df.index, fill_value=False)
df['B'] = df['A'].where(mask, df['A'].bfill()).ffill().bfill()
print (df)
A B
0 NaN 4.0
1 NaN 4.0
2 4.0 4.0
3 NaN 4.0
4 NaN 7.0
5 7.0 7.0
6 NaN 7.0
7 NaN 7.0
8 NaN 1.0
9 NaN 1.0
10 1.0 1.0
11 NaN 1.0
12 NaN 6.0
13 6.0 6.0
14 NaN 6.0
15 NaN 6.0

关于python - 结合 bfill() 和 ffill() 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53745925/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com