前向填充仅特定值

我有一个表示对象状态的数组,其中 0 - 对象关闭,1 - 对象打开。

import pandas as pd
import numpy as np

s = [np.nan, 0, np.nan, np.nan, 1, np.nan, np.nan, 0, np.nan, 1, np.nan]
df = pd.DataFrame(s, columns=["s"])
df
      s
0   NaN
1   0.0
2   NaN
3   NaN
4   1.0
5   NaN
6   NaN
7   0.0
8   NaN
9   1.0
10  NaN

我只需要转发其中的 0 值,如下所示。

>>> df_wanted
      s
0   NaN
1   0.0
2   0.0
3   0.0
4   1.0
5   NaN
6   NaN
7   0.0
8   0.0
9   1.0
10  NaN

在这里浏览类似的问题后,我只是比较ffill-ed 和bfill-ed 值并用掩码分配回来:

mask = (df.ffill() == 0) & (df.bfill() == 1)
df[mask] = 0
df
      s
0   NaN
1   0.0
2   0.0
3   0.0
4   1.0
5   NaN
6   NaN
7   0.0
8   0.0
9   1.0
10  NaN

但是,如果任何 0 值后面没有 1,它也无济于事。考虑到这种情况,还有什么更优雅的解决方案?

以上是前向填充仅特定值的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>