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
我有一个由测量值组成的数据集,我的数据框如下所示:
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