Pandas-唯一地将下n行分组,其中n由列值定义

Pandas-唯一地将下n行分组,其中n由列值定义,pandas,dataframe,pandas-groupby,Pandas,Dataframe,Pandas Groupby,假设我有一个熊猫系列,看起来像这样: 0 1 1 1 2 1 3 2 4 2 5 3 6 3 7 3 8 2 9 2 10 2 11 2 12 1 值为1表示此行是其自己的组。第一次看到值2时,表示此行和下一行在一个组中。第一次看到值3时,表示此行和以下两行在一个组中。等等等等 因此,对于上述示例,我希望将其分组如下: 0 1 ------ 1 1 ------ 2 1 ------ 3 2 4 2 ------ 5 3 6

假设我有一个熊猫系列,看起来像这样:

0   1
1   1
2   1
3   2
4   2
5   3
6   3
7   3
8   2
9   2
10  2
11  2
12  1
值为1表示此行是其自己的组。第一次看到值2时,表示此行和下一行在一个组中。第一次看到值3时,表示此行和以下两行在一个组中。等等等等

因此,对于上述示例,我希望将其分组如下:

0   1
------
1   1
------
2   1
------
3   2
4   2
------
5   3
6   3
7   3
------
8   2
9   2
------
10  2
11  2
------
12  1

我知道这可以通过iTrows和记录行数来实现,但我很好奇是否有更好的方法在熊猫身上实现类似的功能。谢谢

使用
diff
cumsum
创建
groupby

key = s.diff().ne(0).cumsum()

key = s.groupby([s.groupby(key).cumcount()//s,key],sort=False).ngroup()
d = {x : y for x , y in s.groupby(key)}
d
{0: 0    1
Name: s, dtype: int64, 1: 1    1
Name: s, dtype: int64, 2: 2    1
Name: s, dtype: int64, 3: 3    2
4    2
Name: s, dtype: int64, 4: 5    3
6    3
7    3
Name: s, dtype: int64, 5: 8    2
9    2
Name: s, dtype: int64, 6: 10    2
11    2
Name: s, dtype: int64, 7: 12    1
Name: s, dtype: int64}
#关键显示如下

key
0     0
1     1
2     2
3     3
4     3
5     4
6     4
7     4
8     5
9     5
10    6
11    6
12    7
dtype: int64

@AlexK检查更新