This question already has answers here:
How to groupby consecutive values in pandas DataFrame
                                
                                    (2个答案)
                                
                        
                                12个月前关闭。
            
                    
我有一个像这样的数据框:

index   value
----    -----
1         A
2         A
3         A
4         A
5         B
6         B
7         A
8         B
9         C
10        C


我想添加一列以计数继续发生我的值,如下所示:

index   value   continues-count
----    -----    ----------
1         A       1
2         A       2
3         A       3
4         A       4
5         B       1
6         B       2
7         A       1
8         B       1
9         C       1
10        C       2


我可以使用循环来执行此操作,但是由于我的数据集非常庞大,因此需要花费很长时间!

最佳答案

使用shiftcumsum太无聊了,让我们尝试itertools

import itertools
df['New']=list(itertools.chain(*[list(range(len(list(y))))for _,y in itertools.groupby(df.value)]))
df
Out[596]:
   index value  New
0      1     A    0
1      2     A    1
2      3     A    2
3      4     A    3
4      5     B    0
5      6     B    1
6      7     A    0
7      8     B    0
8      9     C    0
9     10     C    1




pandas方式

df['New']=df.groupby((df.value!=df.value.shift()).ne(0).cumsum()).cumcount()+1

关于python - 计数继续在列中出现值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55033122/

10-12 17:47