计算列的先例条目并创建这些计数的新变量

Counting Precedant Entries of a column and creating a new varaible of these counts

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

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

我不是在查看 here 等特定条目的出现频率,而是在 ID 级别

上连续出现的条目

您可以使用 cumcount by Series which is create by cumsum of shifted concanecate values by shift:

#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

另一个解决方案 ngroup (pandas 0.20.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