我有以下 DataFrame,其中Value是指我的觀察結果,Criterion指示何時應將Value設定為np.nan。
| 價值 | 標準 |
|---|---|
| 3 | 0 |
| 3 | 0 |
| 5 | 1 |
| 7 | 0 |
| 2 | 0 |
| 2 | 0 |
| 8 | 1 |
| 8 | 0 |
| 8 | 0 |
| 1 | 0 |
每當Criterion等于 1 時,我想將同一行中的Value以及所有連續的Value設定為零,直到Value更改。所需的輸出應如下所示。
| 價值 | 標準 |
|---|---|
| 3 | 0 |
| 3 | 0 |
| 南 | 1 |
| 7 | 0 |
| 2 | 0 |
| 2 | 0 |
| 南 | 1 |
| 南 | 0 |
| 南 | 0 |
| 1 | 0 |
uj5u.com熱心網友回復:
按Value列中的連續值創建組并測驗是否至少有一個1in Criterion,然后設定NaN每組 in Series.mask:
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))
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/355845.html
