我有一个表示对象状态的数组,其中 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,这将无济于事。考虑到这种情况,还有什么更优雅的解决方案?