根据Pandas数据帧中的事件填充当前行中的下一行事件


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列中的前一行和当前行,以确定边界,然后maskshiftVehSpdGS列中的值

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

您可以使用两个掩码来查找valsidxs,并为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

输出:

结果4<15.0>14//tr>
BrkPressStateVehSpdGS
012NaN
113NaN
212NaN
3112.0
4012NaN
5013NaN
60113.0
713
8015NaN
9014NaN
101512.0
11112NaN
1211314.0
130NaN

最新更新