python - 熊猫填充和滚动平均值
问题描述
我正在尝试填充所有缺失值,直到数据框结束,但无法这样做。在下面的示例中,我取最后三个值的平均值。我的代码只填写到 2017 年 1 月 10 日,而我想填写到 2017 年 1 月 14 日。对于 1/14,我想使用 11,12 和 13 中的值。请帮忙。
import pandas as pd
df = pd.DataFrame([
{"ds":"2017-01-01","y":3},
{"ds":"2017-01-02","y":4},
{"ds":"2017-01-03","y":6},
{"ds":"2017-01-04","y":2},
{"ds":"2017-01-05","y":7},
{"ds":"2017-01-06","y":9},
{"ds":"2017-01-07","y":8},
{"ds":"2017-01-08","y":2},
{"ds":"2017-01-09"},
{"ds":"2017-01-10"},
{"ds":"2017-01-11"},
{"ds":"2017-01-12"},
{"ds":"2017-01-13"},
{"ds":"2017-01-14"}
])
df["y"].fillna(df["y"].rolling(3,min_periods=1).mean(),axis=0,inplace=True)
结果:
ds y
0 2017-01-01 3.0
1 2017-01-02 4.0
2 2017-01-03 6.0
3 2017-01-04 2.0
4 2017-01-05 7.0
5 2017-01-06 9.0
6 2017-01-07 8.0
7 2017-01-08 2.0
8 2017-01-09 5.0
9 2017-01-10 2.0
10 2017-01-11 NaN
11 2017-01-12 NaN
12 2017-01-13 NaN
13 2017-01-14 NaN
期望的输出:
解决方案
您可以遍历 y 中的值,如果遇到 nan 值,请查看 3 个较早的值并使用.at[]将 3 个较早的值的平均值设置为新值:
for index, value in df['y'].items():
if np.isnan(value):
df['y'].at[index] = df['y'].iloc[index-3: index].mean()
缺失值的结果数据框:
7 2017-01-08 2.000000
8 2017-01-09 6.333333
9 2017-01-10 5.444444
10 2017-01-11 4.592593
11 2017-01-12 5.456790
12 2017-01-13 5.164609
13 2017-01-14 5.071331
推荐阅读
- excel - SSIS在postgres数据库中将所有字符串值作为空值插入
- shinydashboard - 在线部署shinyapp多次报错
- c - 我应该如何处理未处理的异常
- go - 无法获得 hashcorp / Vault
- javascript - 无法访问使用 google api 创建的电子表格,它显示为私有
- python - Python矩阵乘法与一系列变量
- typescript - 如何制作字符串联合类型的所有字符串的数组?
- python - 如何在 python 的每一行中打印 4 个数字?
- flutter - syncfusion_flutter_charts 没有提供我所有的数据
- swift - Swift Firebase Firestore 用户列表(读取次数过多)