gpt4 book ai didi

python - Pandas : Replace NaNs with mean of 'n' nearest non-empty values in column

转载 作者:行者123 更新时间:2023-12-05 05:09:40 25 4
gpt4 key购买 nike

假设我有以下数据框。

     A      B
0 NaN 12
1 NaN NaN
2 24 NaN
3 NaN NaN
4 NaN 13
5 NaN 11
6 NaN 13
7 18 NaN
8 19 NaN
9 17 NaN

在“A”列中,如果缺失值存在,则需要将其替换为序列中距离最近的 3 个非空值的平均值。

例如 索引 5 处的 NaN 将 18 作为其最接近的非空值,并且在 18 之后,接下来的两个值也是非空的。因此,索引 5 处的 NaN 将替换为 (18+19+17)/3。

索引 4 处的 NaN 将 24 作为其最接近的非空值,但 24 之前的两个值都是非空的。因此,索引 4 处的 NaN 不会被任何值替换。

同样,需要对其余列进行处理。有谁知道这样做的矢量化方式?
谢谢!

最佳答案

我相信您需要将滚动与 mean 结合起来再从后面滚动,然后使用 DataFrame.interpolate 替换最近的 NaNmean s 对最后一组 NaN 进行前向填充s 和第一组 NaN 的回填,用于辅助 DataFrame c ,用于替换原始 DataFrame 的缺失值:

a = df.rolling(3).mean()
b = df.iloc[::-1].rolling(3).mean()

c = a.fillna(b).fillna(df).interpolate(method='nearest').ffill().bfill()
print (c)
A B
0 24.0 12.000000
1 24.0 12.000000
2 24.0 12.000000
3 24.0 12.333333
4 24.0 12.333333
5 18.0 11.000000
6 18.0 12.333333
7 18.0 12.333333
8 19.0 12.333333
9 18.0 12.333333

df = df.fillna(c)
print (df)
A B
0 24.0 12.000000
1 24.0 12.000000
2 24.0 12.000000
3 24.0 12.333333
4 24.0 13.000000
5 18.0 11.000000
6 18.0 13.000000
7 18.0 12.333333
8 19.0 12.333333
9 17.0 12.333333

关于python - Pandas : Replace NaNs with mean of 'n' nearest non-empty values in column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57393103/

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