2017-08-29 54 views
1

我有一個數據框,我想計算一列的連續條目數並將計數記錄在單獨的變量中。這裏有一個例子:計算列的Precedant條目並創建這些計數的新變量

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級別條目

回答

3

可以使用cumcount通過Series這是連續發生由創建偏移了concanecate值:

#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