我想补df的nan平均相邻元件.
考虑一个数据帧:
df = pd.DataFrame({'val': [1,np.nan, 4, 5, np.nan, 10, 1,2,5, np.nan, np.nan, 9]})
val
0 1.0
1 NaN
2 4.0
3 5.0
4 NaN
5 10.0
6 1.0
7 2.0
8 5.0
9 NaN
10 NaN
11 9.0
Run Code Online (Sandbox Code Playgroud)
我想要的输出是:
val
0 1.0
1 2.5
2 4.0
3 5.0
4 7.5
5 10.0
6 1.0
7 2.0
8 5.0
9 7.0 <<< deadend
10 7.0 <<< deadend
11 9.0
Run Code Online (Sandbox Code Playgroud)
我已经研究了其他解决方案,例如含有NaN的填充单元格,其前后均值,但是在连续两次或更多次np.nan的情况下这不起作用.
任何帮助是极大的赞赏!
San*_*apa 35
df = (df.ffill()+df.bfill())/2
print(df)
val
0 1.0
1 2.5
2 4.0
3 5.0
4 7.5
5 10.0
6 1.0
7 2.0
8 5.0
9 7.0
10 7.0
11 9.0
Run Code Online (Sandbox Code Playgroud)
编辑:如果第一个和最后一个元素包含NaN然后使用(Dark
建议):
df = pd.DataFrame({'val':[np.nan,1,np.nan, 4, 5, np.nan,
10, 1,2,5, np.nan, np.nan, 9,np.nan,]})
df = (df.ffill()+df.bfill())/2
df = df.bfill().ffill()
print(df)
val
0 1.0
1 1.0
2 2.5
3 4.0
4 5.0
5 7.5
6 10.0
7 1.0
8 2.0
9 5.0
10 7.0
11 7.0
12 9.0
13 9.0
Run Code Online (Sandbox Code Playgroud)
尽管在连续出现多个 的情况下,nan它不会产生您指定的确切输出,但到达此页面的其他用户实际上可能更喜欢该方法的效果interpolate():
df = df.interpolate()
print(df)
val
0 1.0
1 2.5
2 4.0
3 5.0
4 7.5
5 10.0
6 1.0
7 2.0
8 5.0
9 6.3
10 7.7
11 9.0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1345 次 |
| 最近记录: |