首页 > 解决方案 > 如何复制低于现有值的值,直到下一个非空白值?

问题描述

我试着搜索了一下,但很难用语言来描述它,所以很难找到(并且用正确的语言)。

鉴于:

  A B C
1 1
2
3
4 2
5
6 3
7
8
9
0

想要的结果:

  A B C D
1 1     1
2       1
3       1
4 2     2
5       2
6 3     3
7       3
8       3
9       3
0       3

标签: pythonpython-3.xpandasnumpy

解决方案


您的 DataFrame 在“空”单元格中没有NaN,所以我假设:

  • 每列的dtypeobject(实际上是string),
  • “空”单元格包含空字符串空格

在这种情况下,一种可能的解决方案是:

  • 用NaN替换空字符串/空格,
  • 调用填充

就像是:

df['D'] = df.A.replace(r'^\s*$', np.nan, regex=True).ffill()

编辑

如果要“向下复制”的值可以在任何列中(不仅在A中),那么解决方案是:

df['D'] = df.replace(r'^\s*$', np.nan, regex=True).ffill(axis=1)\
    .iloc[:, -1].ffill()

与Anky在他的评论中提出的类似。


推荐阅读