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
或者如果需要测试第一个值是 1
列 Criterion
中的每个连续组,请使用:
s= df['Value'].ne(df['Value'].shift()).cumsum()
df['Value'] = df['Value'].mask(df['Criterion'].groupby(s).transform('first').eq(1))
我有以下 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
或者如果需要测试第一个值是 1
列 Criterion
中的每个连续组,请使用:
s= df['Value'].ne(df['Value'].shift()).cumsum()
df['Value'] = df['Value'].mask(df['Criterion'].groupby(s).transform('first').eq(1))