<Age>我必须在以该列上方和下方最接近的可用值的平均值命名的列中估算缺失值<Age>。
如果该Age列的值按顺序排列
NA,7,6,NA,7,8,NA,NA,NA,10,5,NA,NA,5,9,9,12,8,6,NA,NA
插补后,列应如下所示
7,7,6,6.5,7,8,9,9,9,10,5,5,5,5,9,9,12,8,6,6,6
我知道用均值、众数或中值前向填充、后向填充来填充值,但不是这个。我是这个领域的新手,也是一名学生。任何帮助,将不胜感激。
谢谢
<Age>我必须在以该列上方和下方最接近的可用值的平均值命名的列中估算缺失值<Age>。
如果该Age列的值按顺序排列
NA,7,6,NA,7,8,NA,NA,NA,10,5,NA,NA,5,9,9,12,8,6,NA,NA
插补后,列应如下所示
7,7,6,6.5,7,8,9,9,9,10,5,5,5,5,9,9,12,8,6,6,6
我知道用均值、众数或中值前向填充、后向填充来填充值,但不是这个。我是这个领域的新手,也是一名学生。任何帮助,将不胜感激。
谢谢
IIUC 你可以简单地使用 Pandas Series.interpolate()方法:
数据:
In [8]: NA = np.nan
In [9]: s = pd.Series([NA,7,6,NA,7,8,NA,NA,NA,10,5,NA,NA,5,9,9,12,8,6,NA,NA])
In [10]: s
Out[10]:
0 NaN
1 7.0
2 6.0
3 NaN
4 7.0
5 8.0
6 NaN
7 NaN
8 NaN
9 10.0
10 5.0
11 NaN
12 NaN
13 5.0
14 9.0
15 9.0
16 12.0
17 8.0
18 6.0
19 NaN
20 NaN
dtype: float64
解决方案:
In [11]: s.interpolate().bfill()
Out[11]:
0 7.0
1 7.0
2 6.0
3 6.5
4 7.0
5 8.0
6 8.5
7 9.0
8 9.5
9 10.0
10 5.0
11 5.0
12 5.0
13 5.0
14 9.0
15 9.0
16 12.0
17 8.0
18 6.0
19 6.0
20 6.0
dtype: float64
如果您需要四舍五入的整数:
In [13]: s.interpolate().round().bfill().astype(int)
Out[13]:
0 7
1 7
2 6
3 6
4 7
5 8
6 8
7 9
8 10
9 10
10 5
11 5
12 5
13 5
14 9
15 9
16 12
17 8
18 6
19 6
20 6
dtype: int32