BrkPressState | VehSpdGS |
---|---|
1 | 2 |
1 | 3 |
1 | 2 |
1 | 4 |
0 | 12 |
0 | 13 |
0 | 11 |
1 | 3 |
0 | 15 |
0 | 14 |
0 | 15 |
1 | 12 |
1 | 13 |
0 | 14 |
让我们执行diff
来比较BrkPressState
列中的前一行和当前行,以确定边界,然后mask
和shift
是VehSpdGS
列中的值
m = df['BrkPressState'].diff().ne(0)
df['Results'] = df['VehSpdGS'].mask(~m).shift(-1)
BrkPressState VehSpdGS Results
0 1 2 NaN
1 1 3 NaN
2 1 2 NaN
3 1 4 12.0
4 0 12 NaN
5 0 13 NaN
6 0 11 3.0
7 1 3 15.0
8 0 15 NaN
9 0 14 NaN
10 0 15 12.0
11 1 12 NaN
12 1 13 14.0
13 0 14 NaN
您可以使用两个掩码来查找vals
和idxs
,并为result
列设置索引值。
mask1 = df['BrkPressState'] != df['BrkPressState'].shift()
vals = df.loc[mask1, 'VehSpdGS'][1:].values
mask2 = df['BrkPressState'] != df['BrkPressState'].shift(-1)
idxs = df.loc[mask2, 'VehSpdGS'][:-1].index
df.loc[idxs, 'result'] = vals
print(df)
BrkPressState VehSpdGS result
0 1 2 NaN
1 1 3 NaN
2 1 2 NaN
3 1 4 12.0
4 0 12 NaN
5 0 13 NaN
6 0 11 3.0
7 1 3 15.0
8 0 15 NaN
9 0 14 NaN
10 0 15 12.0
11 1 12 NaN
12 1 13 14.0
13 0 14 NaN
您也可以在VehSpdGS
上执行shift(-1)
,然后在df['BrkPressState'] != df['BrkPressState'].shift(-1)
的情况下用NaN
替换值
代码:
df["result"]=df["VehSpdGS"].shift(-1).where(df['BrkPressState'] != df['BrkPressState'].shift(-1),pd.NA)
df
输出:
BrkPressState | VehSpdGS | |||
---|---|---|---|---|
0 | 1 | 2 | NaN | |
1 | 1 | 3 | NaN | |
2 | 1 | 2 | NaN | |
3 | 1 | 412.0 | ||
4 | 0 | 12 | NaN | |
5 | 0 | 13 | NaN | |
6 | 0 | 11 | 3.0 | |
7 | 1 | 3 | <15.0>||
8 | 0 | 15 | NaN | |
9 | 0 | 14 | NaN | |
10 | 15 | 12.0 | ||
11 | 1 | 12 | NaN | |
12 | 1 | 13 | 14.0 | |
13 | 0 | 14NaN | //tr>