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

Gar*_*vey 7 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'))
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

结果应该是:

     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
Run Code Online (Sandbox Code Playgroud)

我想知道是否有优雅和快速的方法来实现这个没有循环.

jpp*_*jpp 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
Run Code Online (Sandbox Code Playgroud)