通过平均上一行值来填充缺失值

时间:2018-11-16 10:48:26

标签: python python-3.x pandas

我想用先前的N行值的平均值来填充缺失值,示例如下所示:

N=2
df = pd.DataFrame([[np.nan, 2, np.nan, 0],
                    [3, 4, np.nan, 1],
                    [np.nan, np.nan, np.nan, 5],
                    [np.nan, 3, np.nan, np.nan]],
                    columns=list('ABCD'))

DataFrame就像:

     A   B   C  D
0   NaN 2.0 NaN 0
1   3.0 4.0 NaN 1
2   NaN NaN NaN 5
3   NaN 3.0 NaN NaN

结果应为:

     A   B       C  D
0   NaN 2.0     NaN 0
1   3.0 4.0     NaN 1
2   NaN (4+2)/2 NaN 5
3   NaN 3.0     NaN (1+5)/2

我想知道是否有一种优雅而又快速的方法来实现此目的而无需for循环。

1 个答案:

答案 0 :(得分:6)

rolling + mean + shift

在前两个值之一为空的情况下,您需要修改以下逻辑以解释NaN和另一个值的均值。

df = df.fillna(df.rolling(2).mean().shift())

print(df)

     A    B   C    D
0  NaN  2.0 NaN  0.0
1  3.0  4.0 NaN  1.0
2  NaN  3.0 NaN  5.0
3  NaN  3.0 NaN  3.0