测试用例:
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, 4]],
columns=list('ABCD'))
其中Ai + 1,j,Ai - 1,j,Ai+ 1,Ai,j -1是与Ai,j相邻的一组条目。
这么多话说,这是:
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 4
应该变成这样:
A B C D
0 3.0 2.0 2.0 0.0
1 3.0 4.0 4.0 1.0
2 3.0 4.0 5.0 5.0
3 3.0 3.0 4.0 4.0
发布于 2018-10-28 15:13:16
您可以在两个方向上使用rolling
方法,然后找到每个方向的最大值。然后,您可以使用它来填充原始值的缺失值。
df1 = df.rolling(3, center=True, min_periods=1).max().fillna(-np.inf)
df2 = df.T.rolling(3, center=True, min_periods=1).max().T.fillna(-np.inf)
fill = df1.where(df1 > df2).fillna(df2)
df.fillna(fill)
输出
A B C D
0 3.0 2.0 2.0 0
1 3.0 4.0 4.0 1
2 3.0 4.0 5.0 5
3 3.0 3.0 4.0 4
发布于 2018-10-28 15:11:04
您可以在指定的每个方向填充NaNs,并取最大值:
pd.concat([
df.ffill(limit=1),
df.ffill(axis=1, limit=1),
df.bfill(limit=1),
df.bfill(axis=1, limit=1)]
).max(level=0)
这假设您在初始DataFrame中有唯一的行标签。
https://stackoverflow.com/questions/53032611
复制相似问题