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

时间:2017-08-29 11:37:49

标签: 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        
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级别上连续出现的条目

1 个答案:

答案 0 :(得分:3)

您可以使用Series cumcount cumsum shiftngroup按{{3}}的{{3}}移位后的{38}创建:

#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

{{3}}(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