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检查更新