Python 仅按邻居分组

Python group by only neighbours

我有一个由测量值组成的数据集,我的数据框如下所示:

ID  VAL BS  ERROR
0   0   0   0
1   1   0   1
2   1   0   1
3   0   0   0
4   11  10  1
5   10  10  0
6   12  10  2
7   11  10  1
8   9   10  -1
9   30  30  0
10  31  30  1
11  29  30  -1
12  10  10  0
13  9   10  -1
14  8   10  -2
15  11  10  1
16  0   0   0
17  1   0   1
18  2   0   2
19  9   10  -1
20  10  10  0

其中VAL是测量值,BS是基数(四舍五入到最接近的10),ERROR是测量值与基数的差值。

我想做的是按 'BASE' 列进行分组,但仅限于邻域行。

因此,生成的数据集将如下所示(我还想计算一组的聚合最小和最大误差,但我想这不会有问题)

对于这种情况,保持组的顺序很重要。

ID  BS  MIN MAX
0   0   0   1
1   10  -1  2
2   30  -1  1
3   10  -2  1
4   0   0   2
5   10  -1  0

您可以这样找到连续的组:

df['GROUP'] = (df['BS']!=df['BS'].shift()).cumsum()

然后按 GROUP 列分组并聚合最小值和最大值:

df.groupby(['GROUP', 'BS'])['ERROR'].agg(['min', 'max']).reset_index()

输出应该是:

GROUP   BS  min max
0   1   0   0   1
1   2   10  -1  2
2   3   30  -1  1
3   4   10  -2  1
4   5   0   0   2
5   6   10  -1  0