python - Pandas:用最大的非 nan 相邻单元格替换 numpy.nan 单元格
问题描述
测试用例:
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'))
其中 A[i + 1, j], A[i - 1, j], A[i, j + 1], A[i, j - 1] 是与 A[i,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
解决方案
您可以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
推荐阅读
- python - 使用 products.urls 中定义的 URLconf,Django 按以下顺序尝试了这些 URL 模式:
- java - 了解 SHA-256 哈希
- django - django.template.exceptions.TemplateSyntaxError:第 30 行的块标记无效:'else'。您是否忘记注册或加载此标签?
- php - 无法在模型对象 Laravel 上调用 SAVE 方法
- string - “String”类型不是 Flutter 中“Item”类型的子类型
- python - 从文件文本转换比特币私钥 - 逐行
- angular - 带有 *ngFor ARIA 标签的 Angular Material mat-option 在 Lighthouse 失败
- javascript - 树视图中的 React.js 搜索过滤器
- flyway - 有没有办法先执行可重复的飞行脚本?
- arrays - 在Kotlin中除以数组的大小,但我得到零,甚至数组的大小等于1或更多