Python 计算列的前置项并创建这些计数的新变量

Python 计算列的前置项并创建这些计数的新变量,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我有一个数据框,我想计算一列中连续条目的数量,并将计数记录在一个单独的变量中。以下是一个例子: ID Class 1 A 1 A 2 A 1 B 1 B 1 B 2 B 1 C 1 C 2 A 2 A

我有一个数据框,我想计算一列中连续条目的数量,并将计数记录在一个单独的变量中。以下是一个例子:

ID    Class    
1      A        
1      A        
2      A        
1      B        
1      B        
1      B        
2      B        
1      C        
1      C        
2      A        
2      A        
2      A        
我希望在每个组ID中计算连续类的数量,因此输出如下所示:

ID    Class   Counts
1      A       0
1      A       1
2      A       0
1      B       0
1      B       1
1      B       2
2      B       0
1      C       0
1      C       1
2      A       0
2      A       1
2      A       2
我不是看特定条目的出现频率,而是看ID级别的条目连续出现的频率,您可以通过
系列使用
,该系列是通过以下移动concanate值创建的:

另一个带有(
0.20.2+
)的解决方案:

#use separator which is not in data like _ or ¥
s = df['ID'].astype(str) + '¥' + df['Class']
df['Counts'] = df.groupby(s.ne(s.shift()).cumsum()).cumcount()
print (df)
    ID Class  Counts
0    1     A       0
1    1     A       1
2    2     A       0
3    1     B       0
4    1     B       1
5    1     B       2
6    2     B       0
7    1     C       0
8    1     C       1
9    2     A       0
10   2     A       1
11   2     A       2
s = df.groupby(['ID','Class']).ngroup()
df['Counts'] = df.groupby(s.ne(s.shift()).cumsum()).cumcount()
print (df)
    ID Class  Counts
0    1     A       0
1    1     A       1
2    2     A       0
3    1     B       0
4    1     B       1
5    1     B       2
6    2     B       0
7    1     C       0
8    1     C       1
9    2     A       0
10   2     A       1
11   2     A       2