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

2024-04-26 23:33:12 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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


Tags: 数据目的id数量here记录条目级别
1条回答
网友
1楼 · 发布于 2024-04-26 23:33:12

您可以使用^{}by Series,它是由^{}通过^{}移位的concanate值创建的:

#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

另一个带有^{}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

相关问题 更多 >