Non*_*per 9 python numpy dataframe pandas
我有一个这样的清单:
list_1 = [np.NaN, np.NaN, 1, np.NaN, np.NaN, np.NaN, 0, np.NaN, 1, np.NaN, 0, 1, np.NaN, 0, np.NaN, 1, np.NaN]
Run Code Online (Sandbox Code Playgroud)
所以有以 开头1和结尾的间隔0。我怎样才能替换这些间隔中的值,比如用 1?结果将如下所示:
list_2 = [np.NaN, np.NaN, 1, 1, 1, 1, 0, np.NaN, 1, 1, 0, 1, 1, 0, np.NaN, 1, np.NaN]
Run Code Online (Sandbox Code Playgroud)
我NaN在这个例子中使用,但可以适用于任何值的通用解决方案也很棒
熊猫解决方案:
s = pd.Series(list_1)
s1 = s.eq(1)
s0 = s.eq(0)
m = (s1 | s0).where(s1.cumsum().ge(1),False).cumsum().mod(2).eq(1)
s.loc[m & s.isna()] = 1
print(s.tolist())
#[nan, nan, 1.0, 1.0, 1.0, 1.0, 0.0, nan, 1.0, 1.0, 0.0, 1.0, 1.0, 0.0, nan, 1.0, 1.0]
Run Code Online (Sandbox Code Playgroud)
但如果只有1,0或者NaN你可以这样做:
s = pd.Series(list_1)
s.fillna(s.ffill().where(lambda x: x.eq(1))).tolist()
Run Code Online (Sandbox Code Playgroud)
输出
[nan,
nan,
1.0,
1.0,
1.0,
1.0,
0.0,
nan,
1.0,
1.0,
0.0,
1.0,
1.0,
0.0,
nan,
1.0,
1.0]
Run Code Online (Sandbox Code Playgroud)