首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >熊猫:用最大数量的非nan相邻细胞取代numpy.nan细胞

熊猫:用最大数量的非nan相邻细胞取代numpy.nan细胞
EN

Stack Overflow用户
提问于 2018-10-28 14:33:32
回答 2查看 113关注 0票数 4

测试用例:

代码语言:javascript
运行
复制
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相邻的一组条目。

这么多话说,这是:

代码语言:javascript
运行
复制
     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

应该变成这样:

代码语言:javascript
运行
复制
     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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-28 15:13:16

您可以在两个方向上使用rolling方法,然后找到每个方向的最大值。然后,您可以使用它来填充原始值的缺失值。

代码语言:javascript
运行
复制
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)

输出

代码语言:javascript
运行
复制
     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
票数 10
EN

Stack Overflow用户

发布于 2018-10-28 15:11:04

您可以在指定的每个方向填充NaNs,并取最大值:

代码语言:javascript
运行
复制
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中有唯一的行标签。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53032611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档