Pandas DataFrame 将连续值设置为 nan,直到列中的值发生变化

Pandas DataFrame set consecutive values to nan until value in column changes

我有以下 DataFrame,其中 Value 指的是我的观察结果,Criterion 表示,当 Value 应设置为 np.nan

Value Criterion
3 0
3 0
5 1
7 0
2 0
2 0
8 1
8 0
8 0
1 0

每当 Criterion 等于 1 时,我想在同一行中设置 Value,以及所有连续的 Values 归零,直到 Value 改变。 所需的输出应如下所示。

Value Criterion
3 0
3 0
nan 1
7 0
2 0
2 0
nan 1
nan 0
nan 0
1 0

Value 列中的连续值创建组并测试 Criterion 中是否至少有一个 1,然后在 Series.mask 中设置每个组 NaN :

s = df['Value'].ne(df['Value'].shift()).cumsum()

df['Value'] = df['Value'].mask(df['Criterion'].groupby(s).transform('any'))
print (df)
   Value  Criterion
0    3.0          0
1    3.0          0
2    NaN          1
3    7.0          0
4    2.0          0
5    2.0          0
6    NaN          1
7    NaN          0
8    NaN          0
9    1.0          0

或者如果需要测试第一个值是 1Criterion 中的每个连续组,请使用:

s= df['Value'].ne(df['Value'].shift()).cumsum()

df['Value'] = df['Value'].mask(df['Criterion'].groupby(s).transform('first').eq(1))